Я начал изучать HTTP-серверы в Java, и я видел примеры с обеими реализациями, с HTTP-сервером и настройкой Executor для одновременной обработки нескольких запросов и внутри класса, который обрабатывает HTTP-запрос, с реализацией.который выполняется асинхронно с использованием Threads или ThreadPools.
Есть ли какое-либо преимущество между использованием одного над другим?
import com.sun.net.httpserver.HttpExchange
import java.util.concurrent.Executors
import java.net.InetSocketAddress
import com.sun.net.httpserver.HttpServer
fun main(args: Array<String>) {
Thread {
HttpServerExampleWithExecutors()
}.start()
Thread {
HttpServerExampleWithThreadHandlers()
}.start()
}
class HttpServerExampleWithExecutors {
private val port = 8888
private val backlog = 50
init {
val server = HttpServer.create(InetSocketAddress(port), backlog)
server.createContext("/") { ex ->
MyHttpHandler(ex)
}
server.executor = Executors.newCachedThreadPool()
server.start()
println("Server Started on $port")
}
private class MyHttpHandler(ex: HttpExchange) {
init {
// Process request
Thread.sleep(5000)
val body = "<html>Hello World</html>"
ex.sendResponseHeaders(200, body.length.toLong())
ex.responseBody.write(body.toByteArray(charset("UTF-8")))
ex.requestBody.close()
ex.close()
}
}
}
class HttpServerExampleWithThreadHandlers {
private val port = 8889
private val backlog = 50
init {
val server = HttpServer.create(InetSocketAddress(port), backlog)
server.createContext("/") { ex ->
MyThreadedHttpHandler(ex)
}
// server.executor gets the default one
// private static class DefaultExecutor implements Executor {
// public void execute (Runnable task) {
// task.run();
// }
// }
server.start()
println("Server Started on $port")
}
private class MyThreadedHttpHandler(ex: HttpExchange) {
init {
val requestThread = Thread {
// Process request
Thread.sleep(5000)
val body = "<html>Hello World</html>"
ex.sendResponseHeaders(200, body.length.toLong())
ex.responseBody.write(body.toByteArray(charset("UTF-8")))
ex.requestBody.close()
ex.close()
}
requestThread.start()
}
}
}