摘要: 在JDK 5.0之前,java.util.Timer/TimerTask是唯一的內(nèi)置任務(wù)調(diào)度方法,而且在很長(zhǎng)一段時(shí)間里很熱衷于使用這種方式進(jìn)行周期性任務(wù)調(diào)度。
首先研究下Timer/TimerTask的特性(至于javax.swing.Timer就不再研究了)。
上面三段代碼反映了Timer/TimerTask的以下特性:
Timer對(duì)任務(wù)的調(diào)度是基于絕對(duì)時(shí)間的。
所有的TimerTask只有一個(gè)線程TimerThread來(lái)執(zhí)行,因此同一時(shí)刻只有一個(gè)TimerTask在執(zhí)行。
任何一個(gè)TimerTask的執(zhí)行異常都會(huì)導(dǎo)致Timer終止所有任務(wù)。
由于基于絕對(duì)時(shí)間并且是單線程執(zhí)行,因此在多個(gè)任務(wù)調(diào)度時(shí),長(zhǎng)時(shí)間執(zhí)行的任務(wù)被執(zhí)行后有可能導(dǎo)致短時(shí)間任務(wù)快速在短時(shí)間內(nèi)被執(zhí)行多次或者干脆丟棄多個(gè)任務(wù)。
閱讀全文