少し(シングルスレッド)サーバーを作成し、 "work"コードをRunnable
に入れました。この実行可能は、その後Javas Executorのフレームワークを使用して、バックグラウンドスレッドで実行されます。待機中のサーバをシャットダウンする方法は?
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(runnable);
はだから今、私は、このサーバーをシャットダウンするための良い方法を探しています。プログラムを再起動せずにサーバーを再起動する可能性を追加したいので、プロセス全体を終了することはオプションではありません。私を悩ますことは、プログラムがライン7(socket.accept()
)に達した、と私はstop()
-methodを呼び出す場合、サーバはまだまで待つということ、である
class LifecycleWebServer {
private final ExecutorService exec = ...;
public void start() throws IOException {
ServerSocket socket = new ServerSocket(80);
while (!exec.isShutdown()) {
final Socket conn = socket.accept();
// Do stuff with the connection...
}
}
public void stop() { exec.shutdown(); }
}
:
What I have foundはこのようなものです最後に1つの接続が確立され、シャットダウンされました。
これに対処する方法はありますか?
を私はC/C++で書かれたソケットコードについて同様の質問を掲示し、偉大な答えを得ました。同様の効果を得るには、非ブロッキングソケットを使用する必要があると思われます。他のスレッドからソケットを閉じて、socket.acceptによってスローされた例外をキャッチしようとしましたか?実際にうまくいくかどうかは分かりません。 http://stackoverflow.com/questions/2486335/wake-up-thread-blocked-on-accept-call – selbie
似たような質問:http://stackoverflow.com/questions/2983835/how-can-i-interrupt-a -serversocket-accept-method - ソケットを閉じる必要があるようです。 –
[同様の質問] [1]: - あなたはソケット を閉じる必要がありように思える[1]:http://stackoverflow.com/questions/2983835/how-can-i-interrupt-a- serversocket-accept-method –