使用ScheduledExecutorService实现任务延迟

在做项目的过程中,遇到一个场景:在审批流中,如果上级领导不审批,则在10分钟后自动审批。也就是要做一个任务在多长时间后执行的效果

在不断的摸索中,想到了使用线程池,发现有个ScheduledExecutorService可以实现,现将实现过程记录下来

/**
* 测试延迟执行任务(只执行一次)
*/
public class TestScheduledExecutor { public static void main(String[] args) {
System.out.println("创建任务时间:" + new Date());
// 创建一个定长线程池,支持定时及周期性任务执行
ScheduledExecutorService executor = Executors.newScheduledThreadPool();
// 建立一个延时任务,10秒钟之后执行
ScheduledFuture<String> futrue = executor.schedule(new MyTask("haha"), , TimeUnit.SECONDS);
try {
// 如果任务执行完成,future.get()方法会返回一个null。注意,future.get()方法会产生阻塞
System.out.println(futrue.get());
} catch (Exception e) {
e.printStackTrace();
}
// 当前线程执行完之后,关闭与线程池的连接
executor.shutdown();
} } class MyTask implements Callable<String> { private String name; public MyTask(String name) {
super();
this.name = name;
} @Override
public String call() throws Exception {
System.out.println("任务开始执行时间:" + new Date());
return name;
}
}

这里设置的是10秒钟之后执行。看下执行效果:

使用ScheduledExecutorService实现任务延迟

该任务执行完之后,会有返回值,我们可以通过返回值做其它的逻辑

上一篇:BZOJ3879: SvT【后缀数组+单调栈】


下一篇:CyanogenMod wiki reading tips | Android tips