Java 时间服务器demo之线程池

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;
	}

	@Override
	public 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

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



猜你喜欢

转载自xianlincai.iteye.com/blog/2367925
今日推荐