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();
    			}
    		}
    		
    	}
    
    }
    
    
  • 相关阅读:
    c# 得到 XML的节点值和属性值
    jquery 更改超链接
    row_number()得到中间的信息
    UML系统分析与设计03-软件需求分析说明书
    UML系统分析与设计02-用例图和活动图(下)
    从Klocwork中.net检测项说说代码书写
    WCF之诡异通讯超时
    《Beginning WF : Windows Workflow in .NET 4.0》读书笔记
    UML系统分析与设计01-准备
    UML系统分析与设计02-用例图和活动图(上)
  • 原文地址:https://www.cnblogs.com/lovellll/p/10222513.html
Copyright © 2011-2022 走看看