概述
newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。
- 延时执行
private static void scheduledThreadPool01(){
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
for(int i=0;i<10;i++){
Long startTime = System.currentTimeMillis();
scheduledThreadPool.schedule(new Runnable() {
public void run() {
System.out.println("线程名称:" + Thread.currentThread().getName() + "延时运行时间==》" + (System.currentTimeMillis() - startTime));
}
}, 3, TimeUnit.SECONDS);
}
}
线程在加入线程池时,会延时执行,结果如下:
2. 延时后,可以定时执行,以下示例为每3秒执行一次,当前任务没有执行完成,如果到达第二次执行时间,前一个任务没有执行完成时,此时会等待。当前一个任务执行完成后,第二个任务马上执行。
private static void scheduledThreadPool02(){
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
Long startTime = System.currentTimeMillis();
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("延时运行时间==》" + (System.currentTimeMillis() - startTime));
try {
//当此处等待时间大于周期时间时,将以这个时间为执行间隔时间,因为有等待时间
//如此处时间小于间隔时间时,以间隔时间为准,这时没有等待时间
Thread.sleep(1000 * 4);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, 3,3, TimeUnit.SECONDS);
}
结果如下:
3. scheduleWithFixedDelay 当前任务结束后再次等一个间隔时间再进行执行
private static void scheduledThreadPool03(){
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
//当前任务结束后,再等待一个间隔时间(3s)执行下一个任务
Long startTime = System.currentTimeMillis();
scheduledThreadPool.scheduleWithFixedDelay(new Runnable() {
public void run() {
System.out.println("延时运行时间==》" + (System.currentTimeMillis() - startTime));
try {
Thread.sleep(1000 * 4);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, 3,3, TimeUnit.SECONDS);
}
结果如下:
最后
以上就是俊秀鞋垫为你收集整理的java创建线程池的4种方式(三)的全部内容,希望文章能够帮你解决java创建线程池的4种方式(三)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复