Server类
package com.ThreadPool;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
try (ServerSocket ss = new ServerSocket(8888)) {
TheadPoolDemo theadPoolDemo = new TheadPoolDemo(10, 3);
while (true) {
Socket accept = ss.accept();
ListenRunnable listenRunnable = new ListenRunnable(accept);
theadPoolDemo.excute(listenRunnable);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这里我们依然使用Serversocket创建套接字,不同的是我们接下来创建了一个线程池类。传入线程队列大小以及线程最大容量,将一个Runnable实例传入线程池即可实现使用线程池的伪异步I/O编程
线程池实例类
package com.ThreadPool;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class TheadPoolDemo {
private ExecutorService executorService;
public TheadPoolDemo(int maxsize,int queuesize) {
executorService = new ThreadPoolExecutor(3,maxsize,120, TimeUnit.SECONDS,new ArrayBlockingQueue<>(queuesize));
}
public void excute(Runnable target)
{
executorService.execute(target);
}
}
Runnable类
package com.ThreadPool;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class ListenRunnable implements Runnable{
private Socket socket;
public ListenRunnable(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg;
while ((msg = br.readLine())!=null)
{
System.out.println("客户端发来了"+msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}