ScheduledExecutor
Java 5 推出了基于线程池设计的 ScheduledExecutor。其设计思想是,每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需要注意的是,只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ScheduledExecutor 都是在轮询任务的状态。
package com.ibm.scheduler;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorTest implements Runnable {
    private String jobName = "";
    public ScheduledExecutorTest(String jobName) {
        super();
        this.jobName = jobName;
    }
    @Override
    public void run() {
        System.out.println("execute " + jobName);
    }
    public static void main(String[] args) {
        ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
        long initialDelay1 = 1;
        long period1 = 1;
        // 从现在开始1秒钟之后,每隔1秒钟执行一次job1
        service.scheduleAtFixedRate(
                new ScheduledExecutorTest("job1"), initialDelay1,
                period1, TimeUnit.SECONDS);
        long initialDelay2 = 4;
        long delay2 = 2;
        // 从现在开始4秒钟之后,每隔2秒钟执行一次job2
        service.scheduleWithFixedDelay(
                new ScheduledExecutorTest("job2"), initialDelay2,
                delay2, TimeUnit.SECONDS);
    }
}
Output:
execute job1
execute job1
execute job1
execute job1
execute job2
execute job1
execute job1
execute job2

Quartz

Quartz 可以满足更多更复杂的调度需求,首先让我们看看如何用 Quartz 实现每星期二 16:38 的调度安排:

package com.ibm.scheduler;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.helpers.TriggerUtils;
public class QuartzTest implements Job {
    @Override
    //该方法实现需要执行的任务
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        System.out.println("Generating report - "
                + arg0.getJobDetail().getFullName() + ", type ="
                + arg0.getJobDetail().getJobDataMap().get("type"));
        System.out.println(new Date().toString());
    }
    public static void main(String[] args) {
        try {
            // 创建一个Scheduler
            SchedulerFactory schedFact =
            new org.quartz.impl.StdSchedulerFactory();
            Scheduler sched = schedFact.getScheduler();
            sched.start();
            // 创建一个JobDetail,指明name,groupname,以及具体的Job类名,
            //该Job负责定义需要执行任务
            JobDetail jobDetail = new JobDetail("myJob", "myJobGroup",
                    QuartzTest.class);
            jobDetail.getJobDataMap().put("type", "FULL");
            // 创建一个每周触发的Trigger,指明星期几几点几分执行
            Trigger trigger = TriggerUtils.makeWeeklyTrigger(3, 16, 38);
            trigger.setGroup("myTriggerGroup");
            // 从当前时间的下一秒开始执行
            trigger.setStartTime(TriggerUtils.getEvenSecondDate(new Date()));
            // 指明trigger的name
            trigger.setName("myTrigger");
            // 用scheduler将JobDetail与Trigger关联在一起,开始调度任务
            sched.scheduleJob(jobDetail, trigger);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Output:
Generating report - myJobGroup.myJob, type =FULL
Tue Feb 8 16:38:00 CST 2011
Generating report - myJobGroup.myJob, type =FULL
Tue Feb 15 16:38:00 CST 2011

转载于:https://www.cnblogs.com/luozhenfei/p/10470720.html

简单的时间间隔调度任务相关推荐

  1. springmvc+quartz简单实现定时调度

    一.简介:Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十 ...

  2. 调度器Quartz的简述与使用总结

    为什么80%的码农都做不了架构师?>>>    Quartz是一款性能强大的定时任务调度器.开发人员可以使用Quartz让任务在特定时间特定阶段进行运行.比如对特定类型新闻或股指期货 ...

  3. Linux进程调度器概述--Linux进程的管理与调度(十五)

    日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 ...

  4. linux c语言,gcc基于信号机制的程序抢占型调度,用linux编一个迷你操作系统,实现了多线程的功能

    拨开迷雾见分晓,一重山来一峰高 前言 这学期学习操作系统,十分激动,学习了前面内容,提及进程,不由想到在单片机中使用的free-rtos,可以很帅气地同时运行几段代码,便有了模拟的心思,期待深入学习后 ...

  5. Lesson 4.5 梯度下降优化基础:数据归一化与学习率调度

    Lesson 4.5 梯度下降优化基础:数据归一化与学习率调度 在上一小节中,我们讨论了关于随机梯度下降和小批量梯度下降的基本算法性质与使用流程.我们知道,在引入了一定的样本随机性之后,能够帮助参数点 ...

  6. TASKCTL敏捷调度理念的诠释

    功能完整是基本,简单易用才是王道,这就是TASKCTL对敏捷的朴素定义.功能少,怎么复杂也会简单:而功能体系完整,怎么简单也会复杂.因此,简单与复杂是相对的,而TASKCTL正是追求那种在功能完整不可 ...

  7. 2亿QQ用户大调度背后的架构设计和高效运营(上)

    作者介绍 周小军 腾讯高级运维工程师,目前在腾讯社交负责社交业务海量NoSQL集群运维和团队管理.曾在天涯社区任运维副总监.对互联网网站架构.数据中心.云计算及自动化运维等领域有深入研究和理解,积累了 ...

  8. 从Golang调度器的作者视角探究其设计之道!

    导语 | Golang核心开发人员.goroutine调度的设计者Dmitry Vyukov,在2019年的一个talk里深入浅出地阐述了goroutine调度的设计思想以及一些优化的细节.本文是笔者 ...

  9. 广播网关GPC为MDS多媒体调度再添虎翼

    "旅客朋友们,开往北京方面的XXX次列车已进站,列车停靠一站台一道,请旅客们检票上车."伴随着车站广播系统传来的清晰的乘车提示,乘客们正有条不紊地乘车.如今,火车.汽车等车站的广播 ...

  10. Java并发编程之调度线程池

    调度线程池: 调度线程池是线程池类ThreadPoolExecutor的子类,复用了线程池的计算框架,主要用于解决任务在一定的时间间隔后重复执行的问题. 例子 public class Schedul ...

最新文章

  1. leetcode--1:(python)Two Sum
  2. onclick事件执行2次
  3. hibenate.hbm2ddl.auto属性详解
  4. HDFS二次开发常见问题
  5. 嵌套类型的前5个用例
  6. Final Cut Pro X剪辑影片基本步骤
  7. E820-DTU模拟量无线数传电台:物联网工业现场无线数传应用
  8. antd 判断input输入内容是否大于_Python基础语法 | 代码规范amp;判断语句amp;循环语句...
  9. ssh-keygen实现免密码登陆
  10. 一个用于学习的react项目
  11. LeetCode 2. Add Two Numbers (两数相加)
  12. [2019.04.16] 由Python写成的自动解压脚本
  13. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_1_TCP通信的概述(上)...
  14. wechat微信模板消息推送demo
  15. 亚马逊仓库部署机器人:每小时挑拣物品为过去三倍
  16. 噪声概念:白噪声(n)、粉红噪声(1/f)
  17. C# webbrowser文本框的键盘和鼠标模拟输入和模拟鼠标点击
  18. An unexpected error has been detected by Java Runtime Environment
  19. 技嘉B560M VCCIO2电压设计缺陷
  20. 全面剖析页游巨头发家史(转)

热门文章

  1. 全中国加油:Github 开源了新型肺炎防疫项目,一起助力
  2. Spring循环依赖,竟然有这样不可思议的坑!
  3. 后端开发都应该掌握的Redis基础
  4. 2019最新资料!共7T
  5. 谈谈运维监控那些事儿
  6. 华为云TechWave全球技术峰会,看云基础设施全新打开方式
  7. iPhone 11 128G 抱回家!
  8. 眼看 Android 8.0 都出了,你还对 Android开发一窍不通?
  9. day14内置函数作业详解
  10. 十进制转化成八进制(一到十六进制)