導航:首頁 > 編程語言 > java定時任務配置

java定時任務配置

發布時間:2022-11-17 19:58:25

java timer怎麼才配置具體的定時任務去調用方法去執行呢

TimerTask那定義一個變數 private static boolean going = false; 然後修改run方法 public void run() { if (going)return; going = true; //做你的事情 going = false; } 這個可以保證2秒執行一次,如果一次任務超過兩秒,下一次執行會在開始就結束。等待兩秒後再檢查 如果希望前一次任務若超過兩秒,後一次直接在前一次執行結束立即開始 可以換用Thread Thread t = new Thread(){ private static boolean going = true; public void run() { while(going){ int start = System.currentTimeMillis(); //做你的事 int cost = System.currentTimeMillis() - start; if (cost < 2000) { try{ sleep(2000 - cost); }catch(Exception ex){} } } } }; t.start();

Ⅱ java中怎麼實現定時功能

這個是我在網上找的不知道是不是你要的:

java定時任務Timer 關於定時任務,似乎跟時間操作的聯系並不是很大,但是前面既然提到了定時任務,索性在這里一起解決了。設置定時任務很簡單,用Timer類就搞定了。一、延時執行首先,我們定義一個類,給它取個名字叫TimeTask,我們的定時任務,就在這個類的main函數里執行。代碼如下:
package test;
import java.util.Timer;
public class TimeTaskTest {
public static void main(String[] args){ Timer timer = new Timer();
timer.schele(new Task(), 60 * 1000);
}
}
解釋一下上面的代碼。上面的代碼實現了這樣一個功能,當TimeTask程序啟動以後,過一分鍾後執行某項任務。很簡單吧:先new一個Timer對象,然後調用它的schele方法,這個方法有四個重載的方法,這里我們用其中一個,
public void schele(TimerTask task,long delay)
首先,第一個參數第一個參數就是我們要執行的任務。這是一個TimerTask對象,確切點說是一個實現TimerTask的類的對象,因為TimerTask是個抽象類。上面的代碼里 面,Task就是我們自己定義的實現了TimerTask的類,因為是在同一個包裡面,所以沒有顯性的import進來。Task類的代碼如下
package test;
import java.util.TimerTask;
public class Task extends TimerTask { public void run()
{
System.out.println("定時任務執行");
}
}
我們的Task必須實現TimerTask的方法run,要執行的任務就在這個run方法裡面,這里,我們只讓它往控制台打一行字。第二個參數第二個參數是一個long型的值。這是延遲的時間,就是從程序開始以後,再過多少時間來執行定時任務。這個long型的值是毫秒數,所以前面我們的程序裡面,過一分鍾後執行用的參數值就是 60 * 1000。二、循環執行設置定時任務的時候,往往我們需要重復的執行這樣任務,每隔一段時間執行一次,而上面的方法是只執行一次的,這樣就用到了schele方法的是另一個重載函數public void schele(TimerTask task,long delay,long period)
前兩個參數就不用說什麼了,最後一個參數就是間隔的時間,又是個long型的毫秒數(看來java里涉及到時間的,跟這個long是脫不了干係了),比如我們希望上面的任務從第一次執行後,每個一分鍾執行一次,第三個參數值賦60 * 1000就ok了。三、指定執行時間既然號稱是定時任務,我們肯定希望由我們來指定任務指定的時間,顯然上面的方法就不中用了,因為我們不知道程序什麼時間開始運行,就沒辦法確定需要延時多少。沒關系,schele四個重載的方法還沒用完呢。用下面這個就OK了:
public void schele(TimerTask task,Date time)
比如,我們希望定時任務2006年7月2日0時0分執行,只要給第二個參數傳一個時間設置為2006年7月2日0時0分的Date對象就可以了。有一種情況是,可能我們的程序啟動的時候,已經是2006年7月3日了,這樣的話,程序一啟動,定時任務就開始執行了。schele最後一個重載的方法是public void schele(TimerTask task,Date firstTime,long period)
沒必要說什麼了吧:)四、j2ee中的定時任務在實際的項目中,往往定時任務需要對web工程中的資源進行操作,這樣一來,用上面的單個程序的方式可能就有點力不從心了,因為很多web工程的資源它操作不到。解決的辦法是,使用Servlet,把執行定時任務的那些代碼放到Servlet的init()函數里就可以了,這個easy,就沒有必要再寫示例代碼了吧

Ⅲ java代碼啟動一個定時任務

在應用里經常都有用到在後台跑定時任務的需求。舉個例子,比如需要在服務後台跑一個定時任務來進行非實時計算,清除臨時數據、文件等。在本文里,3種不同的實現方法:
普通thread實現
TimerTask實現
ScheledExecutorService實現

1.普通thread

這是最常見的,創建一個thread,然後讓它在while循環里一直運行著,通過sleep方法來達到定時任務的效果。這樣可以快速簡單的實現,代碼如下:

public class Task1 {
public static void main(String[] args) {
// run in a second
final long timeInterval = 1000;
Runnable runnable = new Runnable() {
public void run() {
while (true) {
// ------- code for task to run
System.out.println("Hello !!");
// ------- ends here
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}

2.用Timer和TimerTask

上面的實現是非常快速簡便的,但它也缺少一些功能。
用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;
// scheles the task to be run in an interval
timer.scheleAtFixedRate(task, delay,
intevalPeriod);
} // end of main
}

3.ScheledExecutorService

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

相比於Timer的單線程,它是通過線程池的方式來執行任務的
可以很靈活的去設定第一次執行任務delay時間
提供了良好的約定,以便設定執行的時間間隔

通過ScheledExecutorService#scheleAtFixedRate展示這個例子,通過代碼里參數的控制,首次執行加了delay時間:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheledExecutorService;
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 !!");
}
};
ScheledExecutorService service = Executors
.();
service.scheleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
}
}

Ⅳ java 怎麼寫定時任務

如果要執行一些簡單的定時器任務,無須做復雜的控制,也無須保存狀態,那麼可以考慮使用JDK 入門級的定期器Timer來執行重復任務。

一、原理

JDK中,定時器任務的執行需要兩個基本的類:
java.util.Timer;
java.util.TimerTask;

要運行一個定時任務,最基本的步驟如下:
1、建立一個要執行的任務TimerTask。
2、創建一個Timer實例,通過Timer提供的schele()方法,將 TimerTask加入到定時器Timer中,同時設置執行的規則即可。

當程序執行了Timer初始化代碼後,Timer定時任務就會按照設置去執行。

Timer中的schele()方法是有多種重載格式的,以適應不同的情況。該方法的格式如下:
void schele(TimerTask task, Date time)
安排在指定的時間執行指定的任務。
void schele(TimerTask task, Date firstTime, long period)
安排指定的任務在指定的時間開始進行重復的固定延遲執行。
void schele(TimerTask task, long delay)
安排在指定延遲後執行指定的任務。
void schele(TimerTask task, long delay, long period)
安排指定的任務從指定的延遲後開始進行重復的固定延遲執行。

Timer是線程安全的,此類可擴展到大量同時安排的任務(存在數千個都沒有問題)。其所有構造方法都啟動計時器線程。可以調用cancel() 終止此計時器,丟棄所有當前已安排的任務。purge()從此計時器的任務隊列中移除所有已取消的任務。此類不提供實時保證:它使用 Object.wait(long) 方法來安排任務。

TimerTask是一個抽象類,由 Timer 安排為一次執行或重復執行的任務。它有一個抽象方法run()----計時器任務要執行的操作。因此,每個具體的任務類都必須繼承TimerTask類,並且重寫run()方法。另外它還有兩個非抽象的方法:
boolean cancel()
取消此計時器任務。
long scheledExecutionTime()
返回此任務最近實際 執行的安排 執行時間。

二、例子

下面用Timer實現一個簡單例子:

package stu.timer;

import java.util.Date;
import java.util.TimerTask;

/**
* 重復執行的任務
*
* @author leimin,2008-10-9 9:20:20
*/
public class TestTimerTask extends TimerTask {
/**
* 此計時器任務要執行的操作。
*/
public void run() {
Date executeTime = new Date(this.scheledExecutionTime());
System.out.println("本次任務執行的時間是" + executeTime);
}
}

package stu.timer;

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

/**
* 測試JDK Timer的執行
*
* @author leimin,2008-10-9 9:24:35
*/
public class TestTimer {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schele(task, 500L, 1000L);
}
}

運行結果:
本次任務執行的時間是Thu Oct 09 09:47:57 CST 2008
本次任務執行的時間是Thu Oct 09 09:47:58 CST 2008
本次任務執行的時間是Thu Oct 09 09:47:59 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:00 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:01 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:02 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:03 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:04 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:05 CST 2008
......

Ⅳ java消息定時推送怎麼實現

定時任務實現的幾種方式:
Timer:這是java自帶的java.util.Timer類,這個類允許你調度一個java.util.TimerTask任務。使用這種方式可以讓程序按照某一個頻度執行,但不能在指定時間運行。一般用的較少。
ScheledExecutorService:也jdk自帶的一個類;
是基於線程池設計的定時任務類,每個調度任務都會分配到線程池中的一個線程去執行,也就是說,任務是並發執行,互不影響。Spring Task:Spring3.0以後自帶的task,可以看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多。
Quartz:這是一個功能比較強大的的調度器,可以讓程序在指定時間執行,也可以按照某一個頻度執行,配置起來稍顯復雜。
消息推送推薦選擇極光推送軟體,JPush 是經過考驗的大規模 App 推送平台,每天推送消息量級為數百億條。 開發者集成 SDK 後,可以通過調用 API 推送消息。同時,JPush 提供可視化的 web 端控制台發送通知,統計分析推送效果。 JPush 全面支持 Android, iOS, Winphone 三大手機平台。

Ⅵ JAVA定時器如何配置文件,就是下面這個題,該怎麼做啊

這是一個設計類的題目.不是叫你去配置,目前java的時間任務框架已經比較成熟了

解決這個問題大概需要做一下工作

1 寫一個xml的解釋器類,或者用java的XML的解釋器,用來解釋定時任務xml配置文件

2 寫一個任務管理類
在1解釋完xml後,實際上就是根據xml的配置來執行定時任務了
題目中的介面,實際上就是模擬Thread類,用來執行任務
管理類就是根據配置來啟動和關閉定時任務

Ⅶ java 定時任務的幾種實現方式

  1. JDK 自帶的定時器實現

    // schele(TimerTask task, long delay) 延遲 delay 毫秒 執行
    // schele(TimerTask task, Date time) 特定時間執行
    public static void main(String[] args) {
    for (int i = 0; i < 10; ++i) {
    new Timer("timer - " + i).schele(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 {
    //SchelerFactory 是一個介面,用於Scheler的創建和管理
    SchelerFactory factory = new StdSchelerFactory();
    //從工廠裡面拿到一個scheler實例
    //計劃表(可能翻譯的不太貼切),現在我們有了要做的內容,
    //與調度程序交互的主要API
    /*
    * Scheler的生命期,從SchelerFactory創建它時開始,
    到Scheler調用shutdown()方法時結束;Scheler被創建後,
    可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作
    (如暫停Trigger)。但是,Scheler只有在調用start()方法後,
    才會真正地觸發trigger(即執行job)
    */
    Scheler scheler = factory.getScheler();
    //具體任務.
    //用於定義作業的實例
    //JobBuilder - 用於定義/構建JobDetail實例,用於定義作業的實例。
    JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();


    //Trigger(即觸發器) - 定義執行給定作業的計劃的組件
    //TriggerBuilder - 用於定義/構建觸發器實例
    CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
    .withSchele(CronScheleBuilder.cronSchele("0/1 * * * * ?")).build();
    scheler.scheleJob(job, trigger);
    scheler.start();


    }
    3. Spring boot 任務調度(這個非常容易實現)

    /*
    * 開啟對定時任務的支持
    * 在相應的方法上添加@Scheled聲明需要執行的定時任務。
    */
    @EnableScheling
    //@EnableScheling註解來開啟對計劃任務的支持
    public class Application {

    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    }

    @Component
    public class ScheledTasks {
    private Logger logger = LoggerFactory.getLogger(ScheledTasks.class);
    private int i=0;
    //0 0 0 2 * ?
    @Scheled(cron="* * * 2 * ?")
    //@Scheled 註解用於標注這個方法是一個定時任務的方法
    public void testFixDelay() {
    logger.info("執行方法"+i++);
    }

Ⅷ 在Java中如何設置一個定時任務的代碼應該怎麼寫

指定定時任務的代碼如下:

public void schele(TimerTask task,Date time)

比如,我們希望定時任務2006年7月2日0時0分執行,只要給第二個參數傳一個時間設置為2006年7月2日0時0分的Date對象就可以了.

有一種情況是,可能我們的程序啟動的時候,已經是2006年7月3日了,這樣的話,程序一啟動,定時任務就開始執行了.

schele最後一個重載的方法是

public void schele(TimerTask task,Date firstTime,long period)

Ⅸ JAVA定時執行任務,每天定時幾點鍾執行任務

案例: 你想讓他幾點執行都ok

1.MyJob02
//首先我們需要定義一個任務類,比如為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());
}
2.
public static void main(String[] args) throws Exception {
//SchelerFactory 是一個介面,用於Scheler的創建和管理
SchelerFactory factory = new StdSchelerFactory();
//從工廠裡面拿到一個scheler實例
//計劃表(可能翻譯的不太貼切),現在我們有了要做的內容,
//與調度程序交互的主要API
/*
* Scheler的生命期,從SchelerFactory創建它時開始,
到Scheler調用shutdown()方法時結束;Scheler被創建後,
可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作
(如暫停Trigger)。但是,Scheler只有在調用start()方法後,
才會真正地觸發trigger(即執行job)
*/
Scheler scheler = factory.getScheler();
//具體任務.
//用於定義作業的實例
//JobBuilder - 用於定義/構建JobDetail實例,用於定義作業的實例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();

//Trigger(即觸發器) - 定義執行給定作業的計劃的組件
//TriggerBuilder - 用於定義/構建觸發器實例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchele(CronScheleBuilder.cronSchele("0/1 * * * * ?")).build();
scheler.scheleJob(job, trigger);
scheler.start();

}

Ⅹ java的幾種定時任務

java定時任務有三種:

- JDK自帶 :JDK自帶的Timer以及JDK1.5+ 新增的ScheledExecutorService;


- Quartz :簡單卻強大的JAVA作業調度框架


- Spring3.0以後自帶的task :可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多;

代碼參考:

  1. JDK 自帶的定時器實現

    schele(TimerTask task, Date time) 特定時間執行


    public static void main(String[] args) {


    for (int i = 0; i < 10; ++i) {


    new Timer("timer - " + i).schele(new TimerTask() {


    @Override
    public void run() {


    println(Thread.currentThread().getName() + " run ");


    }


    }, new Date(System.currentTimeMillis() + 2000));


    }
    }

  2. Quartz 定時器實現

    2.1 通過maven引入依賴(這里主要介紹2.3.0) 注意:shiro-scheler中依賴的是1.x版本 如果同時使用會沖突

    <!-- https://mvnrepository.com/artifact/org.quartz-scheler/quartz -->


    <dependency>


    <groupId>org.quartz-scheler</groupId>


    <artifactId>quartz</artifactId>


    <version>2.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, SchelerException {


    Scheler scheler = new StdSchelerFactory().getScheler();


    // 開始


    scheler.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))

// 每隔一秒執行 並一直重復

.withSchele(SimpleScheleBuilder.simpleSchele().withIntervalInSeconds(1).repeatForever())
.build();

scheler.scheleJob(jobDetail , trigger);

Thread.sleep(5000);
// 刪除job

scheler.deleteJob(jobKey);


}

3.Spring 相關的任務調度

3.1 配置文件實現

spring-schele.xml

<task:scheler id="myScheler" pool-size="10" />


<task:scheled-tasks scheler="myScheler">


<task:scheled ref="job" method="test" cron="0 * * * * ?"/>


</task:scheled-tasks>

3.2註解實現

spring-schele.xml


<task:scheler id="myScheler" pool-size="10" />


// 啟用註解


<task:annotation-driven scheler="myScheler"/>

@Component
public class Task{

@Scheled(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定時任務配置相關的資料

熱點內容
伺服器軟路由怎麼做 瀏覽:287
冰箱壓縮機出口 瀏覽:223
OPT最佳頁面置換演算法 瀏覽:640
網盤忘記解壓碼怎麼辦 瀏覽:852
文件加密看不到裡面的內容 瀏覽:651
程序員腦子里都想什麼 瀏覽:430
oppp手機信任app在哪裡設置 瀏覽:185
java地址重定向 瀏覽:268
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:448
程序員出軌電視劇 瀏覽:88
伺服器系統地址怎麼查 瀏覽:54
解壓游戲發行官 瀏覽:601
國外小伙解壓實驗 瀏覽:336
頂級大學開設加密貨幣 瀏覽:437
java重載與多態 瀏覽:528
騰訊應屆程序員 瀏覽:942
一鍵編譯程序 瀏覽:129
語音加密包哪個好 瀏覽:341
有什麼學習高中語文的app 瀏覽:283
安卓手機的表格里怎麼打勾 瀏覽:411