Как правильно использовать ScheduledExecutorService?
Так что я впервые использую ScheduledFuture, и я признаю, что, вероятно, я над головой. Я не могу заставить приведенный ниже пример работать. Цель состоит в том, чтобы просто выполнить два набора действий, каждый со своим временем ожидания, прежде чем переходить к следующему набору и повторять до бесконечности.
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);}