Я создал маленький (однопоточный) сервер и поместил код "работы" в Runnable
. Этот исполняемый файл затем выполняется в фоновом потоке с использованием Javas Executor Framework:
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(runnable);
Итак, сейчас я ищу хороший способ выключить этот сервер. Я хочу добавить возможность перезапуска Сервера без перезапуска программы, поэтому прекращение всего процесса не вариант.
То, что я нашел , выглядит примерно так:
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(); }
}
Меня беспокоит то, что, если программа достигла строки 7 (socket.accept()
) и я вызываю stop()
-метод, Сервер все равно будет ждать, пока будет установлено одно последнее соединение, а затем завершит работу. 1014 *
Есть ли какой-нибудь предпочтительный способ справиться с этим?