Я понимаю, что метод future.get()
является блокирующим. У меня есть простой класс, который представляет задачи в цикле for, каждая задача печатает название темы. Когда я использую Executors.newCachedThreadPool()
и future.get()
в цикле, насколько я понимаю, каждый цикл является синхронным потоком, и исключение исключений TimeOut не должно быть. Но я заметил это исключение. Может кто-то предположить, почему это происходит.Исключение таймаута с использованием future.get() - Java ThreadPools
Код выглядит следующим образом:
public class AsynchronusExecutorTest {
private static ExecutorService executor = null;
static {
executor = Executors.newCachedThreadPool();
System.out.println("New executor");
}
public static void main(String[] args) {
for (int i = 0;; i++) {
final Future<?> future = executor.submit(new MyRunnable3("Thread" + i));
try {
future.get(1, TimeUnit.SECONDS);
System.out.println("Thread returns");
} catch (Exception e) {
System.out.println("Time out occured Exception: " + e);
e.printStackTrace();
future.cancel(true);
}
}
}
}
class MyRunnable3 implements Runnable {
String name;
public MyRunnable3(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("This is test " + name);
if (name.equals("Thread0")) {
for (;;) {
}
}
}
}