1、計畫時間早於當前時間,提前執行
2、timertask類的cancel()方法:將自身從任務佇列中清除
3、timer類的cancel方法:清空任務佇列的全部任務
如果該方法沒有搶到鎖,任務還是繼續執行
4、schedule(timertask task ,long delay,long period)
當前時間基礎上延遲delay毫秒,再以period間隔無限次執行task任務
5、scheduleatfixedrate(timertask task,date firesttime,long period)
同上一方法均會按順序執行(不考慮非執行緒安全),兩個方法區別在於不延遲的情況
這是上篇部落格裡面的介紹,確認過三次眼神、是同乙個意思
public void schedule(timertask task, date firsttime, long period);
//在delay後開始調task,每經過period再次排程:計算出現在應該執行的時間+時間片 理論時間 時間不變減少漏掉排程的情況
假設:task,列印執行時的時間。firsttime,是在20s之前的那個時間點。period是5s(每5秒執行一次),看這兩個方法的表現:【源】
1) schedule(timertask task, date firsttime, long period) 執行效果: 執行時的firsttime是乙個過去時間,所以定時任務啟動時立馬執行了1次。 然後就按照每隔5s執行一次的規則進行執行。
2) scheduleatfixedrate(timertask task, date firsttime,long period) 執行效果: 執行時的firsttime是乙個過去時間,它按照每隔5s執行一次的規則, 把從firsttime到currenttime這個時間段內,所有缺失的任務都給執行了(下面總結有細微)然後再按照每隔5s執行一次的規則,繼續執行當前時間之後的時間段內的任務。
3) 總結:schedule方法的任務執行時間是和currenttime進行比較的,下一次的執行時間是:currenttime + period。scheduleatfixedrate方法的執行時間是和最初設定的firsttime進行比較的,下一次的執行時間是:firsttime + period。如果相加後的時間還沒到當前時間,繼續執行。直到加到的時間大於當前時間。 在原始碼上的區別,在timer類的mainloop()方法中。
scheduleatfixedrate:會執行之前的任務,「補充性」追趕執行,schedule不追趕不補充、會漏
《java多執行緒程式設計核心技術》核心筆記 一
執行緒具有優先順序 執行緒的優先順序具有繼承特性。被呼叫者繼承呼叫者的優先順序 優先順序高的執行緒 絕大部分會現執行 方法內的變數是執行緒安全的。多個執行緒訪問同乙個物件的同步方法時,一定是執行緒安全的。synchronized取得的是物件鎖 多個執行緒訪問乙個物件 synchronized 如果乙...
Java多執行緒 程式設計核心技術4Lock
執行緒間同步互斥,且嗅探鎖定 多路分支通知,使用上較synchronized靈活 呼叫該物件的lock 獲取鎖,unlock 釋放鎖 借助condition實現等待 通知模式 condition 物件監視器 是jdk5 靈活性 多路通知 乙個lock物件中建多個condition例項,執行緒物件可以...
Java 多執行緒程式設計核心技術4 Lock
呼叫lock.lock 的執行緒就持有了 物件監視器 其他執行緒只有等待鎖被釋放時再次爭搶。效果和使用synchronized關鍵字一樣,執行緒之間執行的順序是隨機的。呼叫reentrantlock物件的lock 方法獲取鎖,呼叫unlock 方法釋放鎖。condition類具有更好的靈活性,比如可...