Я создал клиент-серверное приложение для чата, и у меня возникает дисбаланс потоков, потому что я могу завершить только один поток в моем пуле (2 потока).
Например, сервер загружается. Он создает один пул с двумя потоками (один для отправки, один для получения). Сервер отправляет сообщение. Удаляет исходный поток для отправки и создает новый пул. Теперь есть исходный поток получения и новый пул с еще двумя потоками. Он делает то же самое для противоположной истории (получение сообщения).
Оба потока застряли в ожидании ввода или вывода, поэтому я не думаю, что могу сделать какую-либо проверку, чтобы увидеть, если другой поток завершено в пуле.
Код выглядит примерно так
ExecutorService executorService = Executors.newFixedThreadPool(2);
Future<String> send = executorService.submit(this::send);
Future<String> receive = executorService.submit(this::receive);
<some code to check to see if the future is completed>
sendComplete.cancel(true);
receiveComplete.cancel(true);
executorService.shutdownNow();
private void send() throws IOException {
OutputStream os= socket.getOutputStream();
BufferedReader read= new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw= new PrintWriter(os, true);
********String msg= read.readLine(); //This is wear it freezes
pw.println(messageOutput);
pw.flush();
}
Прием замораживается из-за аналогичной строки.
Есть ли способ завершить / закрыть все темы в ExecutorService / пуле? shutdownNow () не работает, потому что код в потоке застрял / застрял в ожидании ввода / вывода.