Java 时间服务器demo之线程池

来源:互联网 发布:093b核潜艇相关数据 编辑:程序博客网 时间:2024/05/16 06:42

1.代码

服务端:

TimeServer.java

package com.ccy.IO.pools;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class TimeServer {public static void main(String[] args) throws IOException {int port = 8080;if(args!=null && args.length>0){port = Integer.valueOf(args[0]);}ServerSocket server =  null;try {server = new ServerSocket(port);Socket socket =null;TimeServerHandlerExecutePool pool = new TimeServerHandlerExecutePool(512, 1024);while(true){socket = server.accept();pool.excute(new TimeServerHandler(socket));}} catch (Exception e) {e.printStackTrace();}finally{if(server!=null){server.close();server = null;}}}}

TimeServerHandlerExecutePool.java

package com.ccy.IO.pools;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class TimeServerHandlerExecutePool {private ExecutorService executor;public TimeServerHandlerExecutePool(int maxPoolSize,int queueSize){executor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), maxPoolSize, 120L, TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(queueSize));}public void excute(java.lang.Runnable task){executor.execute(task);}}
TimeServerHandler.java

package com.ccy.IO.pools;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.text.SimpleDateFormat;public class TimeServerHandler implements Runnable{private Socket socket;public TimeServerHandler(Socket socket){this.socket = socket;}@Overridepublic void run() {System.out.println("TIME SERVER IS LISTENING!!!");BufferedReader reader =null;PrintWriter writer = null;try {reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));writer = new PrintWriter(this.socket.getOutputStream(),true);String msg =null;SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");while(true){msg = reader.readLine();if(msg == null){break;}else{System.out.println("received msg is:"+msg);writer.println(format.format(new java.util.Date()));}}} catch (Exception e) {e.printStackTrace();}finally{if(reader!=null){try {reader.close();} catch (IOException e) {e.printStackTrace();}reader = null;}if(writer!=null){writer.close();writer = null;}if(this.socket != null){try {this.socket.close();} catch (IOException e) {e.printStackTrace();}this.socket = null;}}}}

客户端:

TimeClient.java

package com.ccy.IO.pools;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class TimeClient {public static void main(String[] args) {Socket socket = null;PrintWriter writer = null;;BufferedReader reader = null;try {socket = new Socket("127.0.0.1", 8080);reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new PrintWriter(socket.getOutputStream(),true);writer.println("what time is it now?");String resp = reader.readLine();System.out.println("Now is:"+resp);} catch (Exception e) {e.printStackTrace();}finally{if(reader!=null){try {reader.close();} catch (IOException e) {e.printStackTrace();}reader = null;}if(writer!=null){writer.close();writer = null;}if(socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}socket = null;}}}}
代码来自:李林峰《Netty权威指南》

2.分析:

采用线程池实现IO通信框架,避免了为每一个请求创建一个线程而造成的资源枯竭问题。但是依然采用IO同步阻塞模型,无法从根本上解决我们高并发,高性能的需求!



先模仿在创造吧!

更多精彩内容请继续关注我的博客:http://blog.csdn.net/caicongyang

记录与分享,你我共成长 -from caicongyang





1 0
原创粉丝点击