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
- Java 时间服务器demo之线程池
- Java 时间服务器demo之NIO实现
- epoll+线程池服务器Demo
- java ThreadPoolExecutor 自定义线程池demo
- JAVA线程池应用的DEMO
- Java线程同步Demo
- java线程Demo
- 一个基于线程池的网络处理服务器demo
- Java线程之线程池
- MFC之时间类demo
- 基于netty的时间服务器demo
- Java线程100%死锁demo
- 线程池Demo
- Windows线程池Demo
- 线程池demo
- ThreadPoolExecutor 线程池Demo
- Java Http协议服务器demo
- Java之线程池
- Android安卓开发环境安装
- scala排序demo
- 也谈谈机器学习中的Evaluation Metrics
- Java常用类:时间日期类
- 强引用、弱引用和软引用
- Java 时间服务器demo之线程池
- javascript深入理解js闭包
- Android性能优化之如何避免Overdraw
- 使用struts2实现文件上传并在上传过程中为文件重新命名
- Android自助餐之Jni(三)动态导入so文件
- java对象的拷贝
- 《笨办法学Python》 第7课手记
- 浅谈ViewHolder
- 不懂Git,别说自己是程序猿–20分钟git快速上手