@@ -2,7 +2,7 @@ package server
22
33import java .io .FileNotFoundException
44import java .net .{ServerSocket , Socket , SocketException , SocketTimeoutException }
5- import java .util .concurrent .{ Executors , ThreadFactory }
5+ import java .util .concurrent ._
66
77import com .typesafe .scalalogging .LazyLogging
88import server .handler .Handler
@@ -14,7 +14,7 @@ import server.router.Router
1414
1515object Server {
1616 def main (args : Array [String ]) {
17- val server = new Server (8080 , 4 )
17+ val server = new Server (8080 , 10 , 50 )
1818
1919 server.getRouter.registerHandler(new Handler {
2020 override def handle (request : Request ): Response = {
@@ -27,16 +27,25 @@ object Server {
2727 }
2828}
2929
30- class Server (val port : Int , val poolSize : Int ) extends LazyLogging {
31- private val threadPool = Executors .newFixedThreadPool(poolSize, new WorkerThreadFactory )
30+ class Server (val port : Int , val minThreads : Int , val maxThreads : Int ) extends LazyLogging {
31+ private val executor = new ThreadPoolExecutor (
32+ minThreads,
33+ maxThreads,
34+ 60 ,
35+ TimeUnit .SECONDS ,
36+ new SynchronousQueue [Runnable ](),
37+ new WorkerThreadFactory ,
38+ new ThreadPoolExecutor .CallerRunsPolicy ()
39+ )
40+ executor.allowCoreThreadTimeOut(true )
3241 private val router = new Router
3342
3443 def start (): Unit = {
3544 val serverSocket = new ServerSocket (port)
3645 while (true ) {
3746 val socket = serverSocket.accept()
3847 logger.debug(" Accepted new incoming connection" )
39- threadPool .execute(new Worker (socket, router))
48+ executor .execute(new Worker (socket, router))
4049 }
4150 }
4251
@@ -45,7 +54,9 @@ class Server(val port: Int, val poolSize: Int) extends LazyLogging {
4554
4655class WorkerThreadFactory extends ThreadFactory {
4756 override def newThread (runnable : Runnable ): Thread = {
48- new WorkerThread (runnable, new RequestParser (new RequestLineParser , new HeaderParser ))
57+ val t = new WorkerThread (runnable, new RequestParser (new RequestLineParser , new HeaderParser ))
58+ t.setDaemon(true )
59+ t
4960 }
5061}
5162
0 commit comments