future.get()
それがブロッキング方法であることは理解しています。forループでタスクを送信する単純なクラスがあり、各タスクはスレッドの名前を出力します。Executors.newCachedThreadPool()
andをループで使用する場合future.get()
、各ループが同期フローであり、TimeOut 例外のスコープがないことを理解する限り。しかし、この例外が来ることに気づきました。なぜこれが起こっているのか誰かが示唆できますか?
コードは次のとおりです。
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 (;;) {
}
}
}
}