• timer和ScheduledThreadPoolExecutor


    在JDK1.5的时候在java.util.concurrent并发包下引入了ScheduledThreadPoolExecutor类,引入它的原因是因为Timer类创建的延迟周期性任务存在一些缺陷, ScheduledThreadPoolExecutor继承了ThreadPoolExecutor,并且实现了ScheduledExecutorService接口, ScheduledThreadPoolExecutor也是通过schedule方法执行Runnable任务的。

    ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5); //创建5个执行线程

    Runnable runnable = new Runnable() {

    @Override
    public void run() {
    String time = new SimpleDateFormat("HH:mm:ss").format(new Date());
    System.out.println("Now Time : " + time);
    }
    };

    executor.scheduleWithFixedDelay(runnable, 2, 3, TimeUnit.SECONDS);//2是首次延迟时间,3是定期执行的间隔时间

    timer的缺陷:是单线程的,如果一个任务的执行耗时,那么其他任务会出现实效的问题;不捕获异常,timetask抛出异常会导致整个timer不会执行,新的任务不会被调度;timer是基于绝对时间的,对系统时间比较敏感,而ScheduledThreadPoolExecutor是基于相对时间,他在内部存储了距离下次执行所需要的时间。

  • 相关阅读:
    React学习笔记
    士兵杀敌(一)
    网络爬虫Java实现抓取网页内容
    德莱联盟
    计算球体积
    在页面上 获取键盘事件
    一起玩转mysql
    腾讯云 做出的 不错的 动画 chrome小插件
    jquery MD5
    json to xml
  • 原文地址:https://www.cnblogs.com/zyzg/p/7649315.html
Copyright © 2020-2023  润新知