背景:
阅读新闻
简单多线程服务器实现
[日期: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
相关资讯 服务器
本文评论 查看全部评论 (0)
尊重网上道德,遵守中华人民共和国的各项有关法律法规 承担一切因您的行为而直接或间接导致的民事或刑事法律责任 本站管理人员有权保留或删除其管辖留言中的任意内容 本站有权在网站内转载或引用您的评论 参与本评论即表明您已经阅读并接受上述条款
评论声明
最新资讯