本文目錄一覽:
java定時任務沒有執行完又到執行時間了
代碼錯誤。多數是代碼錯誤導致java定時任務沒有執行完又到執行時間了。
1、首先打開java檢查代碼是否錯誤。
2、其次打開網路診斷器進行測試網路連接是否異常。
3、最後點擊重新運行java即可。
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定時執行一個方法
現在能想到的是三種方法能實現:
1、普通thread實現
:是最常見的,創建一個thread,然後讓它在while循環里一直運行著,通過sleep方法來達到定時任務的效果。
2、timertask
:啟動和去取消任務時可以控制,第一次執行任務時可以指定你想要的delay時間。
3、scheduledexecutorservice實現
:最理想的定時任務實現方式,相比於timer的單線程,它是通過線程池的方式來執行任務的,可以很靈活的去設定第一次執行任務delay時間,提供了良好的約定,以便設定執行的時間間隔等。
希望能幫到你。
JAVA實現定時任務的幾種方式
Java 基本的定時任務,總結方法有三種:
1 創建一個thread,然後讓它在while循環里一直運行著,通過sleep方法來達到定時任務的效果;
2 用Timer和TimerTask與第一種方法相比有如下好處:
當啟動和去取消任務時可以控制
第一次執行任務時可以指定你想要的delay時間
3 用ScheduledExecutorService是從的java.util.concurrent里,做為並發工具類被引進的,這是最理想的定時任務實現方式,相比於上兩個方法,它有以下好處:
相比於Timer的單線程,它是通過線程池的方式來執行任務的
可以很靈活的去設定第一次執行任務delay時間
提供了良好的約定,以便設定執行的時間間隔
原創文章,作者:SOCF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/146004.html