java runnable执行完_java - 如何知道Runnable计划重复执行 - 堆栈内存溢出

您可以设置一种执行映射。

关于每个可运行对象的执行状态的总是最新数据。 这是一个一般示例,因此您需要使其适应您的需求。

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

public class Application {

// Your mocked runnables

private static List workerRunnables = new ArrayList<>();

// This will be the map with always updated values, get the map at[i]

// will return if workerThread[i is running]

private static Map executionMap = new ConcurrentHashMap<>();

private static final int threadPoolSize = 5;

public static void main(String[] args) {

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(threadPoolSize);

for (int i = 0; i < threadPoolSize; i++) {

int finalI = i;

workerRunnables.add(() -> {

try {

// Update the map, the runnable has started

executionMap.put(finalI, true);

// Simulating your API calls with different types of delay

Thread.sleep(3000);

if (finalI == 2) {

Thread.sleep(1000);

}

// Update the map, the runnable has finished

executionMap.put(finalI, false);

} catch (InterruptedException e) {

e.printStackTrace();

}

});

}

workerRunnables.forEach(worker -> scheduler.scheduleWithFixedDelay(worker, 0, 2, TimeUnit.SECONDS));

Executors.newCachedThreadPool().execute(new Runnable() {

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

@Override

public void run() {

scheduler.scheduleWithFixedDelay(new Runnable() {

@Override

public void run() {

for (int i = 0; i < threadPoolSize; i++) {

System.out.println("Runnable number " + i +" is running: " + executionMap.get(i));

}

}

}, 0, 2, TimeUnit.SECONDS);

}

});

}

}

好的,您想了解关于Java的Scheduler以及如何使用它,以下是我为您搜集到的相关信息: Scheduler是Java中的一个工具,它用于在指定的时间间隔内执行任务。Java提供了两种型的Scheduler:Timer和ScheduledExecutorService。 Timer是Java提供的最简单的Scheduler,它允许您安排以固定速率重复执行任务,或者在指定时间内执行任务一次。但是,Timer有一些缺点,例如不能处理多个任务、不能很好地处理异常等。 相比之下,ScheduledExecutorService是Java提供的更高级的Scheduler,它提供了更多的灵活性和控制。ScheduledExecutorService可以安排一个或多个任务在指定时间内执行,也可以安排任务重复执行。此外,它还提供了更好的异常处理和更高的性能。 下面是使用ScheduledExecutorService的示例代码: ``` import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class SchedulerDemo { public static void main(String[] args) { ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); // 安排任务在5秒后执行 scheduler.schedule(new Task(), 5, TimeUnit.SECONDS); // 安排任务在每秒钟执行一次 scheduler.scheduleAtFixedRate(new Task(), 0, 1, TimeUnit.SECONDS); // 关闭scheduler scheduler.shutdown(); } static class Task implements Runnable { @Override public void run() { // 执行任务的代码 } } } ``` 在上面的代码中,我们创建了一个ScheduledExecutorService,然后安排了两个任务。第一个任务会在5秒后执行一次,第二个任务会每秒钟执行一次。最后,我们关闭了scheduler。 希望这些信息能够帮助到您,如果您有任何问题或需要进一步了解,请随时告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值