Java之定時任務

注意測試這些類時應該在主線程總執行,即main方法中執行,如果單元測試使用junit測試不出效果

java.lang.Thread類

public class ThreadTest {
    public static void main(String[] args){    
        Runnable beeper = new Runnable() {   
            public void run() {               
                while (true){          
                    System.out.println("beep");    
                    try {                 
                        /* 執行週期爲3s */             
                        Thread.sleep(3 * 1000);            
                    }catch(InterruptedException e){     
                        e.printStackTrace();                 
                    }              
                }         
            }     
        };      
        Thread thread = new Thread(beeper);      
        thread.start();  
    }
}


java.util.Timer類

import java.util.Timer;
import java.util.TimerTask;

public class TimerTest{
    public static void main(String[] args){     
        Timer timer = new Timer();    
       TimerTask timerTask = new TimerTask() {    
            @Override   
            public void run() {   
                System.out.println("beep");       
            }     
        };    
        /* 2s後開始執行,執行週期爲3s */
        timer.scheduleAtFixedRate(timerTask, 2 *1000, 3 * 1000); 
    }
}

java.util.concurrent.ScheduledExecutorService類

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


public class ScheduledExecutorServiceTest{
    public static void main(String[] args){     
        ScheduledExecutorService scheduler =  Executors.newScheduledThreadPool(1);
        Runnable beeper = new Runnable() { 
            public void run() {     
                System.out.println("beep");   
            }
        };
        /* 2s後開始執行,執行週期爲3s */
        scheduler.scheduleAtFixedRate(beeper, 2, 3, TimeUnit.SECONDS);
    }
}

第三方quartz包

1.添加依賴包(gradle)

compile 'org.quartz-scheduler:quartz:2.3.0'
compile 'org.slf4j:slf4j-log4j12:1.7.10'

除了添加定時任務jar包,還需要添加slf4j 和 log4j整合用的日誌文件,詳情參考官網

2.新建工作類

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class BeepJob  implements Job {    
    public BeepJob(){ 
    }    
    @Override  
    public void execute(JobExecutionContext context) throws JobExecutionException {          
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();   
        System.out.println(dataMap.get("msg"));     
        System.err.println("BeepJob Executed");  
    }
}

3.設置並啓動定時器開始執行工作

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory
;import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class ScheduleTest {   
    public static void main(String[] args){      
        SchedulerFactory sf = new StdSchedulerFactory();   
        Scheduler scheduler = null;    
        try {        
            scheduler = sf.getScheduler();     
            /* 使用JobDetail中的JobDataMap攜帶數據 */    
            Map<String, Object> dataMap = new HashMap<>(); 
            dataMap.put("msg", "beep");        
            JobDataMap jobDataMap = new JobDataMap(dataMap);       
            /* 定義JobDetail */        
            JobDetail job = JobBuilder.newJob(BeepJob.class)    
		            .withIdentity("beep-job", "beep")                 
		            .usingJobData(jobDataMap)                
		            .build();   
            /* 定義開始時間 */    
            Date date = new Date(System.currentTimeMillis() + 2 * 1000);    
            /* Define a Trigger that will fire "date", and  repeat forever, 2s後開始執行,執行週期爲3s */           
            Trigger trigger = TriggerBuilder.newTrigger()            
		            .withIdentity("beep-trigger", "beep")       
		            .startAt(date)                   
		            .withSchedule(SimpleScheduleBuilder.simpleSchedule()            
                    .withIntervalInSeconds(3)                    
		            .repeatForever())                
		            .build();           
            /* Tell quartz to schedule the job using our trigger */      
            scheduler.scheduleJob(job, trigger);          
            scheduler.start();    
        }catch (SchedulerException e){        
            e.printStackTrace();    
        }   
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章