网站首页 > 技术文章 正文
newScheduledThreadPool 是 Executors 类提供的一个工厂方法,用于创建一个可以延迟执行或定期执行任务的线程池。这个线程池非常适合执行定时任务,如调度作业、周期性检查等。
以下是一个使用 newScheduledThreadPool 的例子,该例子展示了如何安排任务在将来某个时间点执行,以及如何安排任务定期执行:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledThreadPoolExample {
public static void main(String[] args) {
// 创建一个包含4个线程的计划线程池
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(4);
// 安排一个任务在10秒后执行
scheduledExecutorService.schedule(() -> {
System.out.println("这个任务在10秒后执行,线程:" + Thread.currentThread().getName());
}, 10, TimeUnit.SECONDS);
// 安排一个任务定期执行,每5秒执行一次
scheduledExecutorService.scheduleAtFixedRate(() -> {
System.out.println("这个任务每5秒执行一次,线程:" + Thread.currentThread().getName());
}, 0, 5, TimeUnit.SECONDS);
// 安排一个任务在初始延迟后,按指定周期重复执行
scheduledExecutorService.scheduleWithFixedDelay(() -> {
System.out.println("这个任务在延迟后每3秒执行一次,线程:" + Thread.currentThread().getName());
}, 3, 3, TimeUnit.SECONDS);
// 为了示例的完整性,等待一段时间,让任务有机会执行
try {
Thread.sleep(40 * 1000); // 等待40秒
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
// 关闭线程池,不再接受新任务,等待现有任务完成
scheduledExecutorService.shutdown();
}
}
在这个例子中,我们首先创建了一个包含4个线程的计划线程池。然后,我们安排了三个任务:
- 单次执行任务:使用 schedule 方法安排一个任务在10秒后执行。
- 固定频率执行任务:使用 scheduleAtFixedRate 方法安排一个任务每5秒执行一次。
- 固定延迟执行任务:使用 scheduleWithFixedDelay 方法安排一个任务在初始延迟3秒后执行,之后每3秒重复执行一次。
在安排完任务后,我们在主线程中等待40秒,以确保任务有机会执行。最后,我们调用 shutdown 方法来关闭线程池,这表示不再接受新任务,并等待现有任务完成。
请注意,实际应用中可能需要更精细地管理线程池的生命周期,以确保资源被正确释放。此外,ScheduledExecutorService 提供的定时任务执行并不保证严格的执行时间间隔,如果任务执行时间较长,可能会影响后续任务的调度。
以上代码输出:
这个任务每5秒执行一次,线程:pool-1-thread-1
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-2
这个任务每5秒执行一次,线程:pool-1-thread-3
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-1
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-1
这个任务每5秒执行一次,线程:pool-1-thread-2
这个任务在10秒后执行,线程:pool-1-thread-3
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-4
这个任务每5秒执行一次,线程:pool-1-thread-1
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-2
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-2
这个任务每5秒执行一次,线程:pool-1-thread-1
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-3
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-3
这个任务每5秒执行一次,线程:pool-1-thread-2
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-1
这个任务每5秒执行一次,线程:pool-1-thread-4
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-3
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-3
这个任务每5秒执行一次,线程:pool-1-thread-4
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-2
这个任务在延迟后每3秒执行一次,线程:pool-1-thread-2
这个任务每5秒执行一次,线程:pool-1-thread-4
猜你喜欢
- 2024-11-21 Java 线程池 | ThreadPoolExecutor 原理分析
- 2024-11-21 面试侃集合 | DelayQueue篇
- 2024-11-21 springboot-如何配置线程池实现定时任务
- 2024-11-21 ThreadPoolExecutor源码解析
- 2024-11-21 心跳与超时:高并发高性能的时间轮超时器
- 2024-11-21 Java线程池ThreadPoolExecutor 线程池
- 2024-11-21 8 个线程池的深渊巨坑,使用不当直接生产事故!!!
- 2024-11-21 java线程池核心类ThreadPoolExecutor的应用
- 2024-11-21 Java线程池:ExecutorService 开发入门
- 2024-11-21 面试官:你给我说一下什么是时间轮吧?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)