私は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") ;
たRunnableコード:
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
ループはソケットclient = server.accept();で停止するので、私にとってはうまくいかないでしょう。 – tb96