日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java se 定时任务_Java实现定时任务的三种方法

發布時間:2023/12/2 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java se 定时任务_Java实现定时任务的三种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Quartz的特點 按作業類的繼承方式來分,主要有以下兩種: 作業類繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式作業類不繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式 注:個人比較推崇第二種,因為這種方式下的

在應用里經常都有用到在后臺跑定時任務的需求。舉個例子,比如需要在服務后臺跑一個定時任務來進行非實時計算,清除臨時數據、文件等。在本文里,我會給大家介紹3種不同的實現方法: 普通thread實現 TimerTask實現 ScheduledExecutorService實現 普通thread 這是最常見的,創建一個thread,然后讓它在while循環里一直運行著,通過sleep方法來達到定時任務的效果。這樣可以快速簡單的實現,代碼如下: package com.vmware.task;import java.util.Date;import java.util.List;import java.util.Map;import com.vmware.dao.TemplateDao;import com.vmware.pojo.Template;import com.vmware.util.TimeUtil;public class TemplateVMTask implements Runnable

{

@Override

public void run() {

while(true){

long starttime=new Date().getTime();//開始時間

String sql="SELECT * from tb_flw_content where type_id='1' or type_id='4'

and `status`='2'";

TemplateDao dao=new TemplateDao();

List list=dao.getTemplate(sql);

VirtualMachineTemplate template=new VirtualMachineTemplate();

template.tempalteToVm(list);

long endtime=new Date().getTime();//結束時間

long usetime=endtime-starttime;//使用時間

try{

//讀取配置文件

TimeUtil util=new TimeUtil();

Map map=util.getURL();

long time=Long.parseLong(String.valueOf(map.get("time")))*1000;//配置時間

if(time-usetime>0){

Thread.sleep(time-usetime);//休眠時間

}

}catch(Exception e){

e.printStackTrace();

}

}

}}在main 方法中,啟動該線程 package com.vmware.test;import com.vmware.task.TemplateVMTask;public class Test {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

TemplateVMTask task=new TemplateVMTask();

Thread thread=new Thread(task);

thread.start();

}} 用Timer和TimerTask 上面的實現是非??煊萌N方法來實現n!實現使用BigDecimal類,因為用int最多正確算到12!,用long最多正確算到20!.實現方法都比較簡單,但是轉換為BigDecimal實現后可能看起來有點莫名其妙。廢話不多說,直接上代碼:

第一種方法:從1開始,一直遞增乘到n,從而實現n!

Java代碼速簡便的,但它也缺少一些功能。 用Timer和TimerTask的話與上述方法相比有如下好處: 當啟動和去取消任務時可以控制 第一次執行任務時可以指定你想要的delay時間 在實現時,Timer類可以調度任務,TimerTask則是通過在run()方法里實現具體任務。 Timer實例可以調度多任務,它是線程安全的。 當Timer的構造器被調用時,它創建了一個線程,這個線程可以用來調度任務: import java.util.Timer;import java.util.TimerTask;public class Task2 {

public static void main(String[] args) {

TimerTask task = new TimerTask() {

@Override

public void run() {

// task to run goes here

System.out.println("Hello !!!");

}

};

Timer timer = new Timer();

long delay = 0;

long intevalPeriod = 1 * 1000;

// schedules the task to be run in an interval

timer.scheduleAtFixedRate(task, delay,

intevalPeriod);

} // end of main} ScheduledExecutorService ScheduledExecutorService是從Java SE 5的java.util.concurrent里,做為并發工具類被引進的,這是最理想的定時任務實現方式。 相比于上兩個方法,它有以下好處:

相比于Timer的單線程,它是通過線程池的方式來執行任務的

可以很靈活的去設定第一次執行任務delay時間

提供了良好的約定,以便設定執行的時間間隔

我們通過ScheduledExecutorService#scheduleAtFixedRate展示這個例子,通過代碼里參數的控制,首次執行加了delay時間: import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class Task3 {

public static void main(String[] args) {

Runnable runnable = new Runnable() {

public void run() {

// task to run goes here

System.out.println("Hello !!");

}

};

ScheduledExecutorService service = Executors

.newSingleThreadScheduledExecutor();

service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);

}}

總結

以上是生活随笔為你收集整理的java se 定时任务_Java实现定时任务的三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。