Java_多线程_延时和周期任务

为了持续的多次执行常见的任务,我们可以利用调度线程池。ScheduledExecutorService支持任务调度,持续执行或者延迟一段时间后执行。调度一个任务将会产生一个专门的future类型ScheduleFuture,它除了提供了Future的所有方法外,还提供了getDelay方法来获得剩余的延迟。在延迟结束后,任务将会并发执行。

为了调度任务持续的执行,executors提供了两个方法scheduleAtFixedRate和scheduleWithFixedDelay。第一个方法用来以固定频率执行一个任务,这个方法接收一个初始化延迟,用来指定这个任务首次被执行等待的时长。第二个方法用来延迟任务的执行。

package com.test.sche;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduleTest {
	
	public static void main(String[] args) {
		// 创建一个任务调度的连接池服务
		ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
		
		Runnable command = new Runnable() {
			
			@Override
			public void run() {
				System.out.println(System.currentTimeMillis()+"-->start done");
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println(System.currentTimeMillis()+"end done");
			}
		};
		// 1. 延时任务 延时指定之间之后执行任务
//		service.schedule(command, 5, TimeUnit.SECONDS);
		
		// 2. 周期任务 在固定的频率  执行周期任务 
//		service.scheduleAtFixedRate(command, 0, 5, TimeUnit.SECONDS);
		
		// 3. 周期任务 在固定的延时 执行周期任务 上一次任务结束之后 延时指定之间开始下一个任务
		service.scheduleWithFixedDelay(command, 0, 5, TimeUnit.SECONDS);
	}
}

发布了359 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Chill_Lyn/article/details/104134945
今日推荐