更改上一章中的"实现一个简易版的BS架构",把每一次请求创建一个线程更改为由线程池调用
public class Service {
public static void main(String[] args) throws IOException {
System.out.println("------ 服务端启动成功 ------");
ServerSocket serverSocket = new ServerSocket(8080);
// 创建线程池
ExecutorService pool = new ThreadPoolExecutor(16 * 2, 16 * 2, 0,
TimeUnit.SECONDS, new ArrayBlockingQueue<>(8),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
while (true) {
Socket socket = serverSocket.accept();
System.out.println("有人上线了 --- " + socket.getRemoteSocketAddress());
pool.execute(new ServiceReadRunnable(socket));
}
}
}
public class ServiceReadRunnable implements Runnable{
private Socket socket;
public ServiceReadRunnable(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
// 立刻相应一个网页内容:”人生苦短,我用Java“给浏览器
try {
OutputStream outputStream = socket.getOutputStream();
PrintStream printStream = new PrintStream(outputStream);
printStream.println("HTTP/1.1 200 OK");
printStream.println("Content-Type:text/html;charset=UTF-8");
printStream.println();
printStream.println("<div style='color:red;font-size:120px;text-align:center'>人生苦短,我用Java</div>");
printStream.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}