我正在用Java編寫多線程服務器應用程序。 一切工作正常,但有一個小問題。 當我停止監聽傳入連接請求的runnable時,套接字保持存在。所以我的問題是:如何停止一個可運行的對象並清理在這個可運行的對象中創建的所有對象?Java:使用套接字清理可運行對象
停止線程的代碼:
Runnable tr = new Worldwide() ;
Thread thread = new Thread(tr) ;
thread.start() ;
online = true ;
while (core.getServerSate()) {
try{
Thread.sleep(200);
} catch (Exception e) {
e.printStackTrace();
}
} ;
thread.stop() ;
thread.
core.printToConsole("Server is offline now") ;
可運行的代碼:
public class Worldwide implements Runnable {
Core core = Core.getInstance() ;
public Worldwide() {
}
@Override
public void run() {
try {
ServerSocket server = new ServerSocket(port) ;
core.printToConsole("Server is online") ;
core.printToConsole ("listening on port :" + server.getLocalPort()) ;
while (core.getServerSate() == true) {
Socket client = server.accept() ;
Runnable tr = new ClientCommunication(client) ;
new Thread (tr).start() ;
}
}
catch(Exception e) {
core.printToConsole ("An error occured while going online") ;
e.printStackTrace() ;
}
}
謝謝,湯姆
不要使用'Thread.stop'。此方法已被棄用。相反,最好使用'Thread.interrupt'並將您的循環邏輯基於線程的中斷狀態。當你捕捉中斷時,你需要傳播它。 – mre 2012-02-12 14:55:33
我想這對我不起作用,因爲循環停在Socket client = server.accept(); – tb96 2012-02-12 15:20:13