concurrencypuzzlers/src/chapter6/FixedThreadPoolWebserver.java
2019-09-20 13:34:33 +02:00

41 lines
1.3 KiB
Java

package chapter6;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/*
* taken from listing 6.4. Added an actual response that the server will always give, proving that the thread is being reused.
*/
public class FixedThreadPoolWebserver {
private static final Executor threadpool = Executors.newFixedThreadPool(1);
public static void main(String[] args) throws IOException {
threadpool.execute(() -> {
Thread.currentThread().setName("Hello Visitor");
});
ServerSocket serverSocket = new ServerSocket(8080);
for (; ; ) {
Socket clientSocket = serverSocket.accept();
threadpool.execute(() -> handleRequest(clientSocket));
}
}
private static void handleRequest(Socket clientSocket) {
try {
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
out.println(createHttpReponse());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static String createHttpReponse() {
return String.format("HTTP/1.0 200%nContent-type: text/plain%nContent-length: 14%n%n%s%n",Thread.currentThread().getName());
}
}