Java并发编程——线程池的使用(五)延时执行的线程池ScheduledExecutorService

来源:互联网 发布:京宽网络24客服电话 编辑:程序博客网 时间:2024/06/05 10:28

一、ScheduledExecutorService的延时执行功能

ScheduledExecutorService是延时执行的线程池,推荐用ScheduledExecutorService代替timer定时器。
创建一个ScheduledExecutorService很简单

ScheduledExecutorService service = Executors.newScheduledThreadPool(num);

延时n秒执行:

//延时n秒执行service.schedule(Runnable, n, TimeUnit.SECONDS);service.schedule(Callable, n, TimeUnit.SECONDS);

栗子:

 public static void main(String[] args) {        ScheduledExecutorService service = Executors.newScheduledThreadPool(3);        System.out.println("开始任务");        //延时3秒执行        service.schedule(new Runnable() {            @Override            public void run() {                System.out.println("执行任务");            }        }, 3, TimeUnit.SECONDS);    }

log:

12-25 16:46:12.700 30954-30954/lbx.myapplication I/System.out: 开始任务12-25 16:46:15.710 30954-31120/lbx.myapplication I/System.out: 执行任务

看下log的时间,可以发现,Runnable里的代码是在3秒后执行的。

二、ScheduledExecutorService的循环执行功能

//循环执行任务,首先延时m秒执行,n秒循环一次service.scheduleAtFixedRate(Runnable, m, n, TimeUnit.SECONDS);

栗子:

    public static void main(String[] args) {        ScheduledExecutorService service = Executors.newScheduledThreadPool(3);        System.out.println("开始任务");        //延时3秒执行,每1秒执行一次        service.scheduleAtFixedRate(new Runnable() {            @Override            public void run() {                System.out.println("执行任务");            }        }, 3, 1, TimeUnit.SECONDS);    }

log:

12-25 16:49:56.000 7698-7698/lbx.myapplication I/System.out: 开始任务12-25 16:49:59.000 7698-7847/lbx.myapplication I/System.out: 执行任务12-25 16:50:00.000 7698-7847/lbx.myapplication I/System.out: 执行任务12-25 16:50:01.000 7698-8406/lbx.myapplication I/System.out: 执行任务12-25 16:50:02.000 7698-8406/lbx.myapplication I/System.out: 执行任务12-25 16:50:03.000 7698-8406/lbx.myapplication I/System.out: 执行任务12-25 16:50:04.000 7698-8406/lbx.myapplication I/System.out: 执行任务

可以发现,刚开始演示了三秒,后续每1秒执行了一次Runnable里的代码逻辑。

三、ScheduledThreadPoolExecutor的使用

ScheduledThreadPoolExecutor是ScheduledExecutorService的子类,

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(num);

它有以下常用的方法:

//获取未完成的任务队列executor.getQueue();//移除任务队列中的任务  future = executor.scheduleAtFixedRate/scheduleWithFixedDelayexecutor.remove((Runnable) future);//取消任务队列中的schedule任务,但不会在队列中删除,即getQueue的数量不会减1,executor.setRemoveOnCancelPolicy(true)的时候减1boolean cancel = future.cancel(true);//schedule任务是否取消future.isCancelled()//延时的schedule在shutdown后,不会继续执行没到时间的任务,默认是true,会执行一次正在倒计时的任务再结束executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);//延时的scheduleAtFixedRate/scheduleWithFixedDelay在shutdown后,不会继续执行没到时间的任务,默认是true,会执行一次正在倒计时的任务再结束executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(false);
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 立体手工制作大全图解 光盘手工制作大全 软泥手工制作图片 幼儿立体手工制作大全 手工衣服制作大全图解 利用废品做手工 小孩手工制作大全图解 废物利用手工作品图片 宝宝手工制作大全图解 幼儿园立体手工制作大全 纸盒房子的手工做法 幼儿园手工制作鱼 简易手工制作大全图解 纸箱手工制作大全图解 教师手工作品 自制简单手工生日礼物 儿童手工创意作品 幼儿手工制作大全图片简单点 幼儿手工制作 亲子作品手工图片 幼儿园手工制作 儿童手工制作小汽车 简单手工制作步骤图片 简单手工制作小礼物图片 简单幼儿手工作品 儿童手工小制作 幼儿手工制作大全图解 雪碧瓶手工制作灯笼 儿童手工制作图片 纸杯手工制作大全 矿泉水瓶手工制作大全 手工制作衣服 幼儿园手工制作图片 幼儿园亲子手工作品 小学手工制作大全图片步骤 动物手工制作 废旧物品手工小制作 幼儿手工花制作大全 手工制作衣服图片 易拉罐手工制作花瓶 儿童手工制作房子图解