您的位置:首页 > 编程语言 > Java开发

Java 时间服务器demo之线程池

2016-01-07 22:30 381 查看

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

记录与分享,你我共成长 -from caicongyang
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: