ScheduledThreadPoolExecutor
扩展自 一文秒懂 Java 线程池之 ThreadPoolExecutor 讲解的 了ThreadPoolExecutor
类,并且添加了其它方法实现了 ScheduledExecutorService
接口。
schedule()
方法允许在指定的延迟后执行一次任务scheduleAtFixedRate()
方法允许在指定的初始延迟后执行任务,然后以一定的周期重复执行,其中period
参数用于指定两个任务的开始时间之间的间隔时间,因此任务执行的频率是固定的。scheduleWithFixedDelay()
方法类似于scheduleAtFixedRate()
,它也重复执行给定的任务,但period
参数用于指定前一个任务的结束和下一个任务的开始之间的间隔时间。也就是指定下一个任务延时多久后才执行。执行频率可能会有所不同,具体取决于执行任何给定任务所需的时间。
静态方法 Executors.newScheduledThreadPool()
方法用于创建包含了指定 corePoolSize
,无上限 maximumPoolSize
和 0
存活时间 keepAliveTime
的 ScheduledThreadPoolExecutor
实例。
例如下面的示例创建了一个包含了 5 个核心线程的 ScheduledThreadPoolExecutor
实例,且每隔 500 毫秒运行一个输出 Hello World
的任务
ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
executor.schedule(() -> {
System.out.println("Hello World");
}, 500, TimeUnit.MILLISECONDS);
范例 2
下面的代码则演示了如何在 500 毫秒延迟后执行任务,然后每 100 毫秒重复执行一次。
CountDownLatch lock = new CountDownLatch(3);
ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
ScheduledFuture<?> future = executor.scheduleAtFixedRate(() -> {
System.out.println("Hello World");
lock.countDown();
}, 500, 100, TimeUnit.MILLISECONDS);
lock.await(1000, TimeUnit.MILLISECONDS);
future.cancel(true);
最新评论
徒弟可以A师傅,学生可以A老师,为什么外包不能A正式,我觉得很正常。异性相吸这是宇宙真理
PHP天下第一(狗头叼花)
第一个不需要关注公主号直接给激活码的帖子!
客户端超时断开后,服务端如果没有设置超时机制,那也会继续等待处理,万一这期间有消息到了,那不是就接受到消息处理了,但是也没有办法返回到客户端,导致消息丢失。
企业级GO项目开发实战 Kubernetes权威指南 第六版
https://pan.baidu.com/s/1q3bnTncIACKoTZFxvx7BQw?pwd=ii7n
RabbitMQ精讲,项目驱动落地,分布式事务拔高 有吗?
Spring Cloud Alibaba 微服务架构实战 https://pan.baidu.com/s/1jF5voFRoeF0lYAzAPBWSbw?pwd=chqk