java中timer的schedule和scheduleAtFixedRate方法區(qū)別詳解
timer的schedule和scheduleAtFixedRate方法一般情況下是沒(méi)什么區(qū)別的,只在某個(gè)情況出現(xiàn)時(shí)會(huì)有區(qū)別--當(dāng)前任務(wù)沒(méi)有來(lái)得及完成下次任務(wù)又交到手上。
我們來(lái)舉個(gè)例子:
暑假到了老師給schedule和scheduleAtFixedRate兩個(gè)同學(xué)布置作業(yè)。
老師要求學(xué)生暑假每天寫(xiě)2頁(yè),30天后完成作業(yè)。
這兩個(gè)學(xué)生每天按時(shí)完成作業(yè),直到第10天,出了意外,兩個(gè)學(xué)生出去旅游花了5天時(shí)間,這5天時(shí)間里兩個(gè)人都沒(méi)有做作業(yè)。任務(wù)被拖延了。
這時(shí)候兩個(gè)學(xué)生采取的策略就不同了:
schedule重新安排了任務(wù)時(shí)間,旅游回來(lái)的第一天做第11天的任務(wù),第二天做第12天的任務(wù),最后完成任務(wù)花了35天。
scheduleAtFixedRate是個(gè)守時(shí)的學(xué)生,她總想按時(shí)完成老師的任務(wù),于是在旅游回來(lái)的第一天把之前5天欠下的任務(wù)以及第16天當(dāng)天的任務(wù)全部完成了,之后還是按照老師的原安排完成作業(yè),最后完成任務(wù)花了30天。
package day01;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
public class Test01 {
public static void main(String[] args) {
final Timer timer = new Timer();
//timer.scheduleAtFixedRate(new TimerTask() {
timer.schedule(new TimerTask() {//分別注釋這行和上面這行試一試效果
int count = 1;
@Override
public void run() {
count++;
if (count == 10) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println("延遲5s");
e.printStackTrace();
}
}
SimpleDateFormat sf = new SimpleDateFormat(
"yyyy MM dd hh:mm:ss");
System.out.println("當(dāng)前時(shí)間:"
+ sf.format(System.currentTimeMillis()) + "計(jì)劃時(shí)間:"
+ sf.format(scheduledExecutionTime()));
}
}, 1000, 1000);
}
}
希望能幫到大家!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java時(shí)間輪調(diào)度算法的代碼實(shí)現(xiàn)
時(shí)間輪是一種高效的定時(shí)調(diào)度算法,主要用于管理延時(shí)任務(wù)或周期性任務(wù),它通過(guò)一個(gè)環(huán)形數(shù)組(時(shí)間輪)和指針來(lái)實(shí)現(xiàn),將大量定時(shí)任務(wù)分?jǐn)偟焦潭ǖ臅r(shí)間槽中,極大地降低了時(shí)間復(fù)雜度和資源開(kāi)銷(xiāo),本文給大家介紹了Java時(shí)間輪調(diào)度算法的代碼實(shí)現(xiàn),需要的朋友可以參考下2025-03-03
Java之SpringBoot定時(shí)任務(wù)案例講解
這篇文章主要介紹了Java之SpringBoot定時(shí)任務(wù)案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Spring Boot 中該如何防御計(jì)時(shí)攻擊
這篇文章主要介紹了Spring Boot 中該如何防御計(jì)時(shí)攻擊,幫助大家更好的使用spring boot框架,感興趣的朋友可以了解下2020-09-09
java獲取當(dāng)前時(shí)間并格式化代碼實(shí)例
這篇文章主要介紹了java獲取當(dāng)前時(shí)間并格式化代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Java中Hashtable類(lèi)與HashMap類(lèi)的區(qū)別詳解
Hashtable的應(yīng)用非常廣泛,HashMap是新框架中用來(lái)代替Hashtable的類(lèi),也就是說(shuō)建議使用HashMap,不要使用Hashtable。可能你覺(jué)得Hashtable很好用,為什么不用呢?這里簡(jiǎn)單分析他們的區(qū)別。2016-01-01
Java基礎(chǔ)之創(chuàng)建虛擬機(jī)對(duì)象的過(guò)程詳細(xì)總結(jié)
本文基于虛擬機(jī)HotSpot和常用的內(nèi)存區(qū)域Java堆深入對(duì)象分配、布局和訪問(wèn)的全過(guò)程,文中有非常詳細(xì)的圖文解說(shuō),對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Java向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)后獲取自增ID的常用方法
有時(shí)候因?yàn)樾略龅男枨笮枰@取剛剛新增的數(shù)據(jù)的自增的主鍵ID,下面這篇文章主要給大家介紹了關(guān)于Java向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)后獲取自增ID的常用方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
JAVA 多態(tài)操作----父類(lèi)與子類(lèi)轉(zhuǎn)換問(wèn)題實(shí)例分析
這篇文章主要介紹了JAVA 多態(tài)操作----父類(lèi)與子類(lèi)轉(zhuǎn)換問(wèn)題,結(jié)合實(shí)例形式分析了JAVA 多態(tài)操作中父類(lèi)與子類(lèi)轉(zhuǎn)換問(wèn)題相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-05-05

