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();
}
}
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM