1.對(duì)象創(chuàng)建及方法調(diào)用
Timertimer=newTimer(); timer.schedule(newTimerTask(){ @Override publicvoidrun(){ //任務(wù)執(zhí)行代碼 } },runDate);
2.任務(wù)執(zhí)行時(shí)間與代碼調(diào)用時(shí)間的關(guān)系
任務(wù)執(zhí)行時(shí)間在代碼調(diào)用時(shí)間之前:以代碼調(diào)用時(shí)間為準(zhǔn)
任務(wù)執(zhí)行時(shí)間在代碼調(diào)用時(shí)間之后:以任務(wù)執(zhí)行時(shí)間為準(zhǔn)
當(dāng)Timer對(duì)象執(zhí)行多個(gè)任務(wù)(TimerTask對(duì)象)時(shí),代碼調(diào)用時(shí)間不一定與任務(wù)的執(zhí)行時(shí)間相同,因?yàn)槟硞€(gè)任務(wù)的執(zhí)行時(shí)間可能會(huì)延遲。
注:一個(gè)Timer對(duì)象中的多個(gè)TimerTask是以隊(duì)列的方式一個(gè)一個(gè)被順序執(zhí)行的。
3.任務(wù)執(zhí)行時(shí)間與循環(huán)間隔時(shí)間的關(guān)系
當(dāng)任務(wù)執(zhí)行的時(shí)間大于計(jì)劃的時(shí)間間隔時(shí),實(shí)際間隔時(shí)間為任務(wù)執(zhí)行的時(shí)間。
4.schedule與scheduleAtFixedRate的區(qū)別
如果任務(wù)的起始執(zhí)行時(shí)間在調(diào)用時(shí)間之后,則schedule與scheduleAtFixedRate在運(yùn)行效果上沒(méi)有區(qū)別,它們的區(qū)別在于追趕性(場(chǎng)景為任務(wù)的起始時(shí)間在調(diào)用時(shí)間之前,下同)。
將兩個(gè)時(shí)間段內(nèi)的時(shí)間所對(duì)應(yīng)的任務(wù)被“補(bǔ)充性”地執(zhí)行,這就是Task任務(wù)的追趕特性。
schedule不具有追趕性,即以代碼的執(zhí)行時(shí)間作為任務(wù)的起始時(shí)間,并按指定的間隔時(shí)間進(jìn)行任務(wù)循環(huán)執(zhí)行;而scheduleAtFixedRate具有追趕性,當(dāng)代碼執(zhí)行時(shí),會(huì)補(bǔ)充兩個(gè)時(shí)間段內(nèi)“欠缺”的任務(wù)執(zhí)行次數(shù),執(zhí)行完之后再以指定的間隔時(shí)間進(jìn)行任務(wù)循環(huán)執(zhí)行。
5.方法cancel()的作用
TimerTask對(duì)象的cancel()方法的作用是將自身從任務(wù)隊(duì)列中進(jìn)行清除,其他任務(wù)不受影響。
Timer對(duì)象的cancel()方法的作用是將任務(wù)隊(duì)列中的所有任務(wù)進(jìn)行清除。
當(dāng)Timer對(duì)象中只有一個(gè)任務(wù)隊(duì)列時(shí),任務(wù)執(zhí)行完后,Timer對(duì)象也不會(huì)銷毀,一直處于等待的狀態(tài),除非調(diào)用cancel()方法。
以上就是長(zhǎng)沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java定時(shí)器線程”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。