public class SchedulingTask {
private static ThreadPoolTaskScheduler threadPoolTaskScheduler;
static {
threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setThreadNamePrefix("MySchedulingTask-");
threadPoolTaskScheduler.setPoolSize(5);
threadPoolTaskScheduler.initialize();
} private Runnable task; private ScheduledFuture<?> future; private String cronStr = ""; //定时任务
public SchedulingTask() {}
public SchedulingTask(Runnable task) {
this.task = task;
}
public SchedulingTask(Runnable task, String cronStr) {
this.task = task;
this.cronStr = cronStr;
} //启动定时任务
public ScheduledFuture<?> startCron() {
future = threadPoolTaskScheduler.schedule(task, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
return new CronTrigger(cronStr).nextExecutionTime(triggerContext);
}
});
return future;
} //取消定时任务
public void stopCron() {
if (future != null) {
future.cancel(true);
}
} //修改定时任务
public void changeCron(String cronStr) {
this.cronStr = cronStr;
stopCron();
startCron();
} //getter setter
public Runnable getTask() {
return task;
} public ScheduledFuture<?> getFuture() {
return future;
} public String getCronStr() {
return cronStr;
} public void setTask(Runnable task) {
this.task = task;
} public void setCronStr(String cronStr) {
this.cronStr = cronStr;
} public static void setThreadPoolTaskScheduler(ThreadPoolTaskScheduler threadPoolTaskScheduler) {
SchedulingTask.threadPoolTaskScheduler = threadPoolTaskScheduler;
} //测试
// public class MyTask implements Runnable {
//
// @Override
// public void run() {
// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ");
// System.out.println("running at " + format.format(new Date()));
// }
// }
}

cancel取消任务会发送中断信号到正在执行的线程,线程中可以使用Thread.interrupted()获取中断信号,线程中的Thread.sleep()会捕捉该中断异常。如果没有获取中断信号,线程会继续执行到结束

ThreadPoolTaskScheduler实现定时任务的更多相关文章

  1. SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10659045.html,否则将追究法律责任!!! 一.在JAVA开发领域,目前可以通过以下 ...

  2. Spring Boot 创建动态定时任务

    1,日期格式转换 //定时任务格式转换public static String convertCronTime(Date jobDate){ //https://blog.csdn.net/qq_39 ...

  3. spring定时任务ThreadPoolTaskScheduler使用注意事项之线程池大小

    背景 最近小伙伴解决了一个工单,描述为"手工推送案件无法推,提示token失效",当前工单状态为待关闭,解决方案为"东软接口不稳定造成的,东软的接口恢复正常后,问题解决& ...

  4. 使用spring的@Scheduled注解执行定时任务,启动项目不输出警告

    在applicationContext.xml中添加: xmlns:task="http://www.springframework.org/schema/task" xsi:sc ...

  5. spring 定时任务 taskScheduler详解

    spring 3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态.也可以使用cron表达式设置定时任务. 被执行的类要实现Runnable接口 TaskSche ...

  6. 定时任务schedule(spring boot )

    1. 定时任务实现方式:SpringBoot自带的Scheduled,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,本文主要介绍. 执行方式:单线程(串行)多线程(并行) ...

  7. Java 定时任务的几种实现方式

    JAVA实现定时任务的几种方式 @(JAVA)[spring|quartz|定时器]  近期项目开发中需要动态的添加定时任务,比如在某个活动结束时,自动生成获奖名单,导出excel等,此类任务由于活动 ...

  8. java 定时任务多线程处理

    @Configuration@EnableSchedulingpublic class ScheduleConfig implements SchedulingConfigurer, AsyncCon ...

  9. SpringBoot(十三):springboot2.0.2定时任务

    使用定义任务: 第一步:启用定时任务第二步:配置定时器资源等第三步:定义定时任务并指定触发规则 1)启动类启用定时任务 在springboot入口类上添加注解@EnableScheduling即可. ...

随机推荐

  1. 学习AJAX必知必会(4)~同源策略、解决跨域问题(JSONP、CORS)

    一.同源策略(Same-Origin Policy),是浏览器的一种安全策略. 1.同源(即url相同):协议.域名.端口号 必须完全相同.(请求是来自同一个服务) 2.跨域:违背了同源策略,即跨域. ...

  2. kindle序列号对应版本

    序列号前缀 型号全称 型号简称 支持越狱 B001, Kindle 1 K1 - B101 B002 Kindle 2 U.S. (Sprint) K2 - B003 Kindle 2 Interna ...

  3. python使用制表符或者换行符来添加空白--3

    #!/usr/bin/python #coding=utf-8 message="python" print(message) print("\tpython" ...

  4. 命令行传参是否只能针对main方法

    先上结论 命令行传参只能针对main方法而言,而且格式严格 这里在原有主类test基础上创建了另一个类,名字为testCMD,但里面创建的方法并不是main方法,在cmd内编译后进行命令行传参,结果如 ...

  5. python 小兵(6)函数根据问题详解

    _list = []for i in range(3): def func(a): return i+a_list.append(func)for f in _list: print(f(1)) 首先 ...

  6. Django之ajax(jquery)封装(包含 将 csrftoken 写入请求头方法)

    由于支持问题,未使用 es6 语法 _ajax.js /** * 发起请求 * @param url 请求地址 * @param data 请求数据 { } json格式 * @param type ...

  7. WinForms 获取文件夹的基本信息

    1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Da ...

  8. android怎么做表格显示数据

    实现思路:最底层(父级)背景为黑色,最上层(子级)背景为白色,然后父子组件之间存在一丝间隔即可显示出类似边框的线. 本次主要利用Android中的TableRow等实现,其他类比也可以实现效果. &l ...

  9. Java线程--BlockingQueue使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871704.html Java线程--BlockingQueue使用 阻塞队列就是内容满了之 ...

  10. Haproxy配合Nginx搭建Web集群部署

    Haproxy配合Nginx搭建Web集群部署实验 1.Haproxy介绍 2.Haproxy搭建 Web 群集 1.Haproxy介绍: a)常见的Web集群调度器: 目前常见的Web集群调度器分为 ...