2

したがって、ScheduledFuture を使用するのはこれが初めてであり、おそらくここで頭を悩ませていることを認めます。以下のサンプルを動作させることができないようです。目標は、次のセットに移動して無期限に繰り返す前に、それぞれ独自のタイムアウトで 2 セットのアクションを実行することです。

static ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
ScheduledFuture<?> warm = executor.scheduleWithFixedDelay(() -> {
      System.out.println("warmbeans");
      //do more stuff here
}, 0, 1000, TimeUnit.MILLISECONDS);
ScheduledFuture<?> cool = executor.scheduleWithFixedDelay(() -> {
      System.out.println("coolbeans");
      //do more stuff here
}, 0, 500, TimeUnit.MILLISECONDS);

while(true) {
    try {warm.get(1000, TimeUnit.MILLISECONDS);}
    catch (InterruptedException | ExecutionException | TimeoutException e) {Listen.cancel(true);}

    try {cool.get(500, TimeUnit.MILLISECONDS);}
    catch (InterruptedException | ExecutionException | TimeoutException e) {Listen.cancel(true);}

問題は、私がこの出力を取得し続けることです:

warmbeans
coolbeans
warmbeans
coolbeans
Exception in thread "Thread-0" java.util.concurrent.CancellationException
    at java.util.concurrent.FutureTask.report(FutureTask.java:121)
    at java.util.concurrent.FutureTask.get(FutureTask.java:206)
    at echoServer.NetworkIO.run(NetworkIO.java:29)
    at java.lang.Thread.run(Thread.java:744)

上記の NetworkIO.java:29 の参照行は次のとおりです。

try {warm.get(1000, TimeUnit.MILLISECONDS);}
4

0 に答える 0