scheduleAtFixedRate使用多任务异步调用并返回结果示例
时间: 2023-08-13 15:25:50 浏览: 163
timerTask定时任务使用java代码操作svn
3星 · 编辑精心推荐
下面是一个使用`scheduleAtFixedRate`方法进行多任务异步调用并返回结果的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.CompletableFuture;
public class ScheduleAtFixedRateExample {
public static void main(String[] args) {
Timer timer = new Timer();
List<CompletableFuture<Integer>> futures = new ArrayList<>();
// scheduleAtFixedRate方法每隔1秒执行一次任务
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("开始执行任务");
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
// 模拟耗时操作
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 1;
});
futures.add(future);
}
}, 0, 1000);
// 每隔0.5秒检查一次所有任务是否完成
TimerTask checkTask = new TimerTask() {
@Override
public void run() {
boolean allDone = futures.stream().allMatch(CompletableFuture::isDone);
if (allDone) {
System.out.println("所有任务都已完成");
futures.forEach(future -> {
try {
System.out.println("任务返回结果:" + future.get());
} catch (Exception e) {
e.printStackTrace();
}
});
timer.cancel();
}
}
};
timer.scheduleAtFixedRate(checkTask, 0, 500);
}
}
```
上述代码中,`scheduleAtFixedRate`方法每隔1秒执行一次任务,这个任务是异步执行的,使用`CompletableFuture`来实现。每次任务执行完后,将其返回的`CompletableFuture`对象添加到一个列表中。另外,还有一个定时任务每隔0.5秒检查一次所有任务是否完成,如果都完成了,则打印所有任务的返回结果,并取消定时器。
阅读全文