Socket用线程池处理服务

while(true){
    try{
Socket clientSocket = serverSocket.accept();
new Thread(new HandlerThread(clientSocket)).start;
}catch (IOException e){

System.out.println(this.getServerName()+"接收socket时发生异常");
e.printStackTrace();
}
}
服务器上可能发生一种拒绝服务攻击(denial-of-service),如果为每个连接生成一个新线程,大量几乎同时如站连接可能导致它生成极大数量的线程
Java虚拟机最终会耗尽内存而崩溃,更好的办法是使用一个线程池来限制资源使用,50个线程应该过客,不论负载多大应该不会崩溃,可能会拒绝连接,但起码不会崩溃

 




while(true){
    try{
Socket clientSocket = serverSocket.accept();
executorService.execute(new HandlerThread(clientSocket));
}catch (IOException e){

System.out.println(this.getServerName()+"接收socket时发生异常");
e.printStackTrace();
}
}
 
 
posted @ 2018-10-23 10:04  北回归线的喵  阅读(1775)  评论(0编辑  收藏  举报