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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

定时器new Timer().schedule()的使用

發布時間:2024/9/27 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 定时器new Timer().schedule()的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

          • 一、基礎知識
            • 1. 簡介
            • 2. 常用API
          • 二、需求案例
            • 2.1. 案例1
            • 2.2. 案例2
            • 2.3. 案例3
          • 三、場景案例
            • 3.1. 在特定時間執行任務,只執行一次
            • 3.2. 指定第一次執行的時間,然后按照間隔時間,重復執行

在開發中,我們經常需要一些周期性的操作,例如每隔幾分鐘就進行某一項操作。這時候我們就要去設置個定時器,Java中最方便、最高效的實現方式是用java.util.Timer工具類,再通過調度java.util.TimerTask任務。

一、基礎知識
1. 簡介

Timer是一種工具,線程用其安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行。實際上是個線程,定時調度所擁有的TimerTasks。
TimerTask是一個抽象類,它的子類由 Timer 安排為一次執行或重復執行的任務。實際上就是一個擁有run方法的類,需要定時執行的代碼放到run方法體內。

2. 常用API
//以下是幾種常用調度task的方法: timer.schedule(task, time); // time為Date類型:在指定時間執行一次。 timer.schedule(task, firstTime, period); // firstTime為Date類型,period為long // 從firstTime時刻開始,每隔period毫秒執行一次。 timer.schedule(task, delay) // delay 為long類型:從現在起過delay毫秒執行一次 timer.schedule(task, delay, period) // delay為long,period為long:從現在起過delay毫秒以后,每隔period // 毫秒執行一次。
二、需求案例
2.1. 案例1
每天定時12:00執行操作,延遲3分鐘后再執行

第1步:寫一個處理類,使用timer.schedule(task, firstTime, period);api

package com.gblfy.test;import java.util.Calendar; import java.util.Date; import java.util.Timer;public class G {/*** 每天定時12:00執行操作,延遲3分鐘后再執行*/public void timer(){Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, 12);//控制小時calendar.set(Calendar.MINUTE, 0);//控制分鐘calendar.set(Calendar.SECOND, 0);//控制秒Date time = calendar.getTime();//執行任務時間為12:00:00Timer timer = new Timer();timer.schedule(new TimerTaskTest2(),60 * 3 * 1000);} }

第2步:寫一個類extends TimerTask實現run方法,在方法內部寫需要執行的代碼

package com.gblfy.test;import java.util.TimerTask;public class TimerTaskTest2 extends TimerTask {@Overridepublic void run() {System.out.println("... //每次需要執行的代碼放到這里面");} }

另一種形式不是輸出一句話而是在run方法內部調用一個自定義方法

package com.gblfy.test;import java.util.TimerTask;public class TimerTaskTest2 extends TimerTask {@Overridepublic void run() {System.out.println("... //每次需要執行的代碼放到這里面");Submit();}private void Submit() {System.out.println("-------------自定義方法-------------");} }
2.2. 案例2
每天定時12:00執行操作,延遲3分鐘后再執行,但是,我需要傳參怎樣辦?

第1步:

package com.gblfy.test;import java.util.Calendar; import java.util.Date; import java.util.Timer;public class A {public void timer(String tokenNo) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, 12);//控制小時calendar.set(Calendar.MINUTE, 0);//控制分鐘calendar.set(Calendar.SECOND, 0);//控制秒Date time = calendar.getTime();//執行任務時間為12:00:00Timer timer = new Timer();//每天定時12:00執行操作,延遲3分鐘后再執行// timer.schedule(new TimerTaskTest(tokenNo),time,60 * 3 * 1000);// timer.schedule(new TimerTaskTest(tokenNo),60 * 3 * 1000);timer.schedule(new TimerTaskTest(tokenNo), 1 * 1000);}public static void main(String[] args) {A a = new A();String tokenNo="123";a.timer(tokenNo);} }

第2步:

package com.gblfy.test;import java.util.TimerTask;public class TimerTaskTest extends TimerTask {private String tokenNo;public TimerTaskTest(String tokenNo) {this.tokenNo = tokenNo;}/*** 此計時器任務要執行的操作。*/@Overridepublic void run() {Submit(tokenNo);System.out.println("-------30分鐘之后執行指定時間time執行--------");}public void Submit(String tokenNo) {System.out.println("1111111111"+tokenNo);} }
2.3. 案例3
延遲3分鐘后再執行,但是,我需要傳參怎樣辦?

只需要燒寫一個參數即可

// timer.schedule(new TimerTaskTest(tokenNo),60 * 3 * 1000);

為了方便測試可以寫成3秒

timer.schedule(new TimerTaskTest(tokenNo), 3 * 1000);
三、場景案例
3.1. 在特定時間執行任務,只執行一次
package com.gblfy.test;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask;public class TimerTime {/*** <p>* 1.停止timer* timer.cancel();* 2.在特定時間執行任務,只執行一次* public void schedule(TimerTask task,Date time)* </p>** @param args* @throws Exception*/public static void main(String[] args) throws Exception {new TimerTime().new Time().start();}// 時間格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");// 要執行的時間參數Date dateTime = new Date("2016/8/13 10:56:00");// 內部類繼承線程 ,創建一個新線程。class Time extends Thread {@Overridepublic void run() {final Timer timer = new Timer();timer.schedule(new TimerTask() {// 重寫run方法@Overridepublic void run() {System.out.println("I am a cat");timer.cancel();}}, dateTime);}} }
3.2. 指定第一次執行的時間,然后按照間隔時間,重復執行
package com.gblfy.test;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask;public class TimerTime {/*** <p>* 1.停止timer* timer.cancel();* 2.在特定時間執行任務,只執行一次* public void schedule(TimerTask task,Date time)* </p>** @param args* @throws Exception*/public static void main(String[] args) throws Exception {new TimerTime().new Time().start();}// 時間格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");// 要執行的時間參數Date dateTime = new Date("2016/8/13 10:56:00");// 內部類繼承線程 ,創建一個新線程。class Time extends Thread {@Overridepublic void run() {final Timer timer = new Timer();timer.schedule(new TimerTask() {// 重寫run方法@Overridepublic void run() {System.out.println("I am a cat");timer.cancel();}}, dateTime);}}/*** 指定第一次執行的時間,然后按照間隔時間,重復執行* public void schedule(TimerTask task,Date firstTime,long period)** @param task* @param firstTime* @param period*/public void schedule(TimerTask task, Date firstTime, long period)// 示例:// 參照上面的代碼,多傳一個時間間隔參數,period單位毫秒class Time2 extends Thread {@Overridepublic void run() {final Timer timer = new Timer();timer.schedule(new TimerTask() {// 重寫run方法@Overridepublic void run() {System.out.println("I am a cat");timer.cancel();}}, dateTime,1000 * 1);}} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的定时器new Timer().schedule()的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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