简单多线程服务器实现(3)

 

 

首页Linux编程

背景:

阅读新闻

简单多线程服务器实现

[日期:2010-01-15]   来源:Linux社区  作者:HSD编辑   [字体:]  

  当然也可以直接使用concurrent的线程池,代码几乎不用改变:
  1 package testmutithreadserver.concurrent;
  2
  3 import java.io.IOException;
  4 import java.net.ServerSocket;
  5 import java.net.Socket;
  6 import java.util.concurrent.ExecutorService;
  7 import java.util.concurrent.Executors;
  8
  9 import testmutithreadserver.old.TestMessage;
  10
  11 /**
  12  * 简单阻塞式多线程服务器(线程池处理)
  13  *
  14  * @author zhangjun
  15  *
  16  */
  17 public class Server {
  18
  19     private int port;
  20
  21     private ServerSocket serverSocket;
  22
  23     private ExecutorService threadPool;
  24
  25     private PortListenThread listener;
  26
  27     public Server(int port) {
  28         this.port = port;
  29         threadPool = Executors.newFixedThreadPool(3);
  30     }
  31
  32     public void start() {
  33         try {
  34             serverSocket = new ServerSocket(port);
  35             listener = new PortListenThread();
  36             listener.start();
  37         } catch (IOException e) {
  38             e.printStackTrace();
  39         }
  40     }
  41
  42     public void shutdown() {
  43         threadPool.shutdown();
  44         listener.finish();
  45     }
  46
  47     private class PortListenThread extends Thread {
  48
  49         private Boolean finish = false;
  50
  51         @Override
  52         public void run() {
  53             while (!finish) {
  54                 try {
  55                     final Socket socket = serverSocket.accept();
  56                     threadPool.execute(new Runnable() {
  57
  58                         @Override
  59                         public void run() {
  60                             new TestMessage(socket).execute();
  61                         }
  62                     });
  63                 } catch (IOException e) {
  64                     e.printStackTrace();
  65                 }
  66
  67             }
  68         }
  69
  70         public void finish() {
  71             finish = true;
  72         }
  73
  74     }
  75
  76     public static void main(String[] args) {
  77         int port = 8888;
  78         System.out.println("server is listening on port: " + port);
  79         new Server(port).start();
  80     }
  81 }
  82

 

C++学习经典记录

C语言中用extern声明外部变量

相关资讯       服务器 

   

本文评论   查看全部评论 (0)


评论声明

尊重网上道德,遵守中华人民共和国的各项有关法律法规

承担一切因您的行为而直接或间接导致的民事或刑事法律责任

本站管理人员有权保留或删除其管辖留言中的任意内容

本站有权在网站内转载或引用您的评论

参与本评论即表明您已经阅读并接受上述条款

 

 

 

最新资讯

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpdjx.html