zoukankan      html  css  js  c++  java
  • quartz 通用的多线程定时任务


    TaskManager

    
    package mytest.task;
    
    import java.text.ParseException;
    
    import org.quartz.CronTrigger;
    import org.quartz.Job;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.impl.StdSchedulerFactory;
    
    /**
     * 
     * 
     * @author luke Lin
     * @version 1.0.0 2017年8月9日 上午9:37:33
     */
    public class TaskManager {
    	
    	public static <T extends Job> void insertTask(String jobName,String expression,Class<T> jobCalss){
    		try {
    			Scheduler schedule = StdSchedulerFactory.getDefaultScheduler();
    			CronTrigger cronTrigger = new CronTrigger(jobName, Scheduler.DEFAULT_GROUP,expression);
    			JobDetail jobDetail  = new JobDetail(jobName,Scheduler.DEFAULT_GROUP,jobCalss);
    			schedule.scheduleJob(jobDetail, cronTrigger);
    			schedule.start();
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		} catch (ParseException e) {
    			e.printStackTrace();
    		} 
    		
    	}
    
    }
    
    


    BastTask

    
    package mytest.task;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;/**
     * @author luke Lin
     * @version 1.0.0 2017年8月9日 上午9:40:43
     */
    public abstract class BastTask implements Job{
    
    	private static int taskCount = 0;
    	
    	public static <T extends Job> void init(String jobName,String expression,Class<T> jobCalss){
    		TaskManager.insertTask(jobName, expression, jobCalss);
    	}
    	
    	public void execute(JobExecutionContext context) throws JobExecutionException {
    		long startTime = System.currentTimeMillis();
    		int currentCount = taskCount++;
    		System.out.println(context.getJobDetail().getFullName() + "-" + currentCount + " 定时任务开始执行");
    		new Thread(new Runnable() {
    			public void run() {
    				doTask();
    			}
    		}).start();
    		long endTime = System.currentTimeMillis();
    		System.out.println(context.getJobDetail().getFullName() + "-" + currentCount + " 定时任务执行完成,耗时:" + (endTime - startTime) + "毫秒");
    	}
    	
    	public abstract void doTask();
    
    }
    
    


    编码自己任务类

    
    package mytest.task.choice;
    
    import java.util.concurrent.LinkedBlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    import mytest.task.BastTask;
    
    /**
     * 
     * 
     * @author luke Lin
     * @version 1.0.0 2017年8月9日 上午9:50:47
     */
    public class DefaultTask extends BastTask{
    
    	private ThreadPoolExecutor cancelPoolExecutor = new ThreadPoolExecutor(10, 100, 0L, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>()); 
    
    	@Override
    	public void doTask() {
    		//定时任务自己的任务业务
    		System.out.println("我要执行我的任务了!");
    		
    		for(int i=0;i<10;i++){
    			cancelPoolExecutor.submit(new CancelOrderRunnable());
    			System.out.println("[cancelPoolExecutor] : " + cancelPoolExecutor.toString());
    		}
    	}
    	
    	public static void main(String[] args) {
    		DefaultTask.init("DefaultTask", "0/1 * * * * ?", DefaultTask.class);
    	}
    	
    	/**
    	 * 线程取消
    	 * @author Jews
    	 */
    	public class CancelOrderRunnable implements Runnable {
    
    		public void run() {
    			System.out.println("这里是我的业务逻辑");
    			try {
    				throw new Exception();
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		
    	}
    
    }
    
    
  • 相关阅读:
    时序图和类图
    word文档一个表格分割成两个表格
    Spring 报错:Error creating bean with name
    怎么让线条快速选中并组合多个形状
    [扩展阅读] Python 函数修饰符(装饰器)的使用
    第039 类和对象 拾遗
    吴恩达深度学习 第一课第三周课后编程作业
    第038讲:类和对象:继承 课后测试题及答案
    廖雪峰Python教程--使用模块
    第037讲:类和对象:面向对象编程
  • 原文地址:https://www.cnblogs.com/lovellll/p/10222513.html
Copyright © 2011-2022 走看看