Я новичок в будущем и многопоточности в java. У меня простая проблема, которая оказалась сложной: у меня есть несколько потоков (у всех есть открытые сеансы), которые открыты бесконечно. Каждый раз, когда один поток генерирует настраиваемое исключение (исключение тайм-аута в сеансе), я должен прервать все потоки и корректно закрыть все сеансы. Что я делаю, так это то, что я сохраняю будущие объекты, возвращаемые потоками (в ArrayList), перебираю их и выдаю future.cancel для всех, когда один поток генерирует исключение.
private static void futureCancel()
{
for(int i=0;i<numberStreams;i++)
{
Future<String> future=futureList.get(i);
try{
future.cancel(true);
future.get();
}
catch(InterruptedException e)
{
System.out.println("In interrupted block!");
} catch (ExecutionException e) {
e.printStackTrace();
}
}
return;
}
Проблема здесь в том, что я не могу добавить InterruptedException в свой код потока из-за некоторых проблем с требованиями и того, как все работает на другой стороне сеансов. Если я выброшу InterruptedException из вызываемого объекта, он не достигнет блока catch, указанного выше. Если я добавляю сон в свой поток (подходит для тестирования) и обрабатываю InterruptedException, он входит в этот блок, как только выдается future.cancel. Что я делаю неправильно?