本文目錄一覽:
java的幾種定時任務
java定時任務有三種:
– JDK自帶 :JDK自帶的Timer以及JDK1.5+ 新增的ScheduledExecutorService;
– Quartz :簡單卻強大的JAVA作業調度框架
– Spring3.0以後自帶的task :可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多;
代碼參考:
JDK 自帶的定時器實現
schedule(TimerTask task, Date time) 特定時間執行
public static void main(String[] args) {
for (int i = 0; i 10; ++i) {
new Timer(“timer – ” + i).schedule(new TimerTask() {
@Override
public void run() {
println(Thread.currentThread().getName() + ” run “);
}
}, new Date(System.currentTimeMillis() + 2000));
}
}
Quartz 定時器實現
2.1 通過maven引入依賴(這裡主要介紹2.3.0) 注意:shiro-scheduler中依賴的是1.x版本 如果同時使用會衝突
!– —
dependency
groupIdorg.quartz-scheduler/groupId
artifactIdquartz/artifactId
version2.3.0/version
/dependency
2.2 創建Job類
public class TestJob implements Job{
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
println(Thread.currentThread().getName() + ” test job begin ” + DateUtil.getCurrentTimeStr());
}
}
2.3 調度任務
public static void main(String[] args) throws InterruptedException, SchedulerException {
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// 開始
scheduler.start();
// job 唯一標識 test.test-1
JobKey jobKey = new JobKey(“test” , “test-1”);
JobDetail jobDetail = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build();
Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(“test” , “test”)
// 延遲一秒執行
.startAt(new Date(System.currentTimeMillis() + 1000))
// 每隔一秒執行 並一直重複
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())
.build();
scheduler.scheduleJob(jobDetail , trigger);
Thread.sleep(5000);
// 刪除job
scheduler.deleteJob(jobKey);
}
3.Spring 相關的任務調度
3.1 配置文件實現
spring-schedule.xml
task:scheduler id=”myScheduler” pool-size=”10″ /
task:scheduled-tasks scheduler=”myScheduler”
task:scheduled ref=”job” method=”test” cron=”0 * * * * ?”/
/task:scheduled-tasks
3.2註解實現
spring-schedule.xml
task:scheduler id=”myScheduler” pool-size=”10″ /
// 啟用註解
task:annotation-driven scheduler=”myScheduler”/
@Component
public class Task{
@Scheduled(cron=”0/5 * * * * ? “) //每5秒執行一次
public void execute(){
DateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.out.println(sdf.format(DateTime.now().toDate())+”*********B任務每5秒執行一次進入測試”);
}
}
java 定時任務的幾種實現方式
JDK 自帶的定時器實現
// schedule(TimerTask task, long delay) 延遲 delay 毫秒 執行
// schedule(TimerTask task, Date time) 特定時間執行
public static void main(String[] args) {
for (int i = 0; i 10; ++i) {
new Timer(“timer – ” + i).schedule(new TimerTask() {
@Override
public void run() {
println(Thread.currentThread().getName() + ” run “);
}
}, 1000);
}
}
2. Quartz 定時器實現
//首先我們需要定義一個任務類,比如為MyJob02 ,
//該類需要繼承Job類,然後添加execute(JobExecutionContext context)方法,在
//這個方法中就是我們具體的任務執行的地方。
//由希望由調度程序執行的組件實現的接口
public class MyJob02 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 執行響應的任務.
System.out.println(“HelloJob.execute,”+new Date());
}
}
public class QuartzTest5 {
public static void main(String[] args) throws Exception {
//SchedulerFactory 是一個接口,用於Scheduler的創建和管理
SchedulerFactory factory = new StdSchedulerFactory();
//從工廠裡面拿到一個scheduler實例
//計劃表(可能翻譯的不太貼切),現在我們有了要做的內容,
//與調度程序交互的主要API
/*
* Scheduler的生命期,從SchedulerFactory創建它時開始,
到Scheduler調用shutdown()方法時結束;Scheduler被創建後,
可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作
(如暫停Trigger)。但是,Scheduler只有在調用start()方法後,
才會真正地觸發trigger(即執行job)
*/
Scheduler scheduler = factory.getScheduler();
//具體任務.
//用於定義作業的實例
//JobBuilder – 用於定義/構建JobDetail實例,用於定義作業的實例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity(“job1”, “group1”).build();
//Trigger(即觸發器) – 定義執行給定作業的計劃的組件
//TriggerBuilder – 用於定義/構建觸發器實例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(“trigger1”, “group1”)
.withSchedule(CronScheduleBuilder.cronSchedule(“0/1 * * * * ?”)).build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
}
3. Spring boot 任務調度(這個非常容易實現)
/*
* 開啟對定時任務的支持
* 在相應的方法上添加@Scheduled聲明需要執行的定時任務。
*/
@EnableScheduling
//@EnableScheduling註解來開啟對計劃任務的支持
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Component
public class ScheduledTasks {
private Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
private int i=0;
//0 0 0 2 * ?
@Scheduled(cron=”* * * 2 * ?”)
//@Scheduled 註解用於標註這個方法是一個定時任務的方法
public void testFixDelay() {
logger.info(“執行方法”+i++);
}
如何讓java定時執行一個方法
現在能想到的是三種方法能實現:
1、普通thread實現
:是最常見的,創建一個thread,然後讓它在while循環里一直運行着,通過sleep方法來達到定時任務的效果。
2、timertask
:啟動和去取消任務時可以控制,第一次執行任務時可以指定你想要的delay時間。
3、scheduledexecutorservice實現
:最理想的定時任務實現方式,相比於timer的單線程,它是通過線程池的方式來執行任務的,可以很靈活的去設定第一次執行任務delay時間,提供了良好的約定,以便設定執行的時間間隔等。
希望能幫到你。
java消息定時推送怎麼實現
定時任務實現的幾種方式:
Timer:這是java自帶的java.util.Timer類,這個類允許你調度一個java.util.TimerTask任務。使用這種方式可以讓程序按照某一個頻度執行,但不能在指定時間運行。一般用的較少。
ScheduledExecutorService:也jdk自帶的一個類;
是基於線程池設計的定時任務類,每個調度任務都會分配到線程池中的一個線程去執行,也就是說,任務是並發執行,互不影響。Spring Task:Spring3.0以後自帶的task,可以看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多。
Quartz:這是一個功能比較強大的的調度器,可以讓程序在指定時間執行,也可以按照某一個頻度執行,配置起來稍顯複雜。
消息推送推薦選擇極光推送軟件,JPush 是經過考驗的大規模 App 推送平台,每天推送消息量級為數百億條。 開發者集成 SDK 後,可以通過調用 API 推送消息。同時,JPush 提供可視化的 web 端控制台發送通知,統計分析推送效果。 JPush 全面支持 Android, iOS, Winphone 三大手機平台。
java的定時器是否會提前執行
定時器不會提前執行。基礎知識java.util.Timer一種線程設施,用於安排以後在後台線程中執行的任務。可安排任務執行一次,或者定期重複執行。此類是線程安全的:多個線程可以共享單個Timer對象而無需進行外部同步。java.util.TimerTask由Timer安排為一次執行或重複執行的任務。
原創文章,作者:QRMX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140258.html