jdk定时器线程池

jdk定时器线程池的使用

ScheduledThreadPoolExecutor

该类实际上是通过ThreadPoolExecutor创建出线程池,通过线程池来处理定时器类任务,可以并行处理各个定时器的任务,互相之间不会受到影响,适用于对于时间精度要严格要求的任务。

  1. 初始化

    	// 父类指向具体的实现,第一个参数为线程池活跃线程数量
    	ScheduleExecutorService service = new ScheduledThreadPoolExecutor(2);  
    
  2. 使用

    • 延时启动任务

        // 延时20s后打印当前系统时间戳
        service.schedule(() -> {
        	String s = new Timestamp(System.currentTimeMillis()).toString();
        	System.out.println(s);
        }, 20, TimeUnit.SECONDS);
      
    • 周期型执行任务

      scheduleAtFixedRate周期计算方式:当前任务开始的时间——下个任务开始时间,如果上个任务的执行时间超过了周期频率时间,则会推迟下个任务的开始时间

      	// 第一个参数为任务,第二个参数:延时多长时间启动该定时器,
      	//第三个参数:周期频率,第四个参数:设定第2,3个参数的时间单位
      	service.scheduleAtFixedRate(() -> {
      		 String s = new Timestamp(System.currentTimeMillis()).toString();
      		 System.out.println(s);
      	}, 0, 20, TimeUnit.SECONDS);
      

      scheduleWithFixedDelay周期计算方式:当前任务结束时间——下个任务开始时间,当前任务结束后开始计算周期频率,然后执行下个任务

      service.scheduleWithFixedDelay(() -> {
      	String s = new Timestamp(System.currentTimeMillis()).toString();
      	System.out.println(s);
      }, 0, 20, TimeUnit.SECONDS);
      

      如果执行的任务对于时间间隔要求必须毫无差错和以及不存在时间累积增加的现象,推荐使用scheduleWithFixedDelay方法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值