使當前執行緒(即呼叫該方法的執行緒)暫停執行一段時間,讓其他執行緒有機會繼續執行,但它並不釋放物件鎖。也就是說如果有synchronized同步快,其他執行緒仍然不能訪問共享資料。注意該方法要捕捉異常。
例如有兩個執行緒同時執行(沒有synchronized)乙個執行緒優先順序為max_priority,另乙個為min_priority,如果沒有sleep()方法,只有高優先順序的執行緒執行完畢後,低優先順序的執行緒才能夠執行;但是高優先順序的執行緒sleep(500)後,低優先順序就有機會執行了。
總之,sleep()可以使低優先順序的執行緒得到執行的機會,當然也可以讓同優先順序、高優先順序的執行緒有執行的機會。
join()方法使呼叫該方法的執行緒在此之前執行完畢,也就是等待該方法的執行緒執行完畢後再往下繼續執行。注意該方法也需要捕捉異常。
// 處於main執行緒呼叫a執行緒的join方法
// main執行緒必須等待a執行緒執行結束
public
final
synchronized
void
join(long millis)
throws interruptedexception
if (millis == 0)
} else
wait(delay);
now = system.currenttimemillis() - base;}}
}
該方法與sleep()類似,只是不能由使用者指定暫停多長時間,並且yield()方法只能讓同優先順序的執行緒有執行的機會。
這三個方法用於協調多個執行緒對共享資料的訪問,所以必須在synchronized語句塊內使用。synchronized關鍵字用於保護共享資料,阻止其他執行緒對共享資料的訪問,但是這樣程式的流程就很不靈活了,如何才能在當前執行緒還沒退出synchronized資料塊時讓其他執行緒也有機會訪問共享資料呢?此時就用這三個方法來靈活控制。
wait()方法使當前執行緒暫停執行並釋放物件鎖標示,讓其他執行緒可以進入synchronized資料塊,當前執行緒被放入物件等待池中。當呼叫notify()方法後,將從物件的等待池中移走乙個任意的執行緒並放到鎖標誌等待池中,只有鎖標誌等待池中線程能夠獲取鎖標誌;如果鎖標誌等待池中沒有執行緒,則notify()不起作用。
notifyall()則從物件等待池中移走所有等待那個物件的執行緒並放到鎖標誌等待池中
java Object類的equals 方法
a 指示其他某個物件是否與此物件 相等 b 預設情況下比較的是物件的引用是否相同。c 由於比較物件的引用沒有意義,一般建議重寫該方法。看以下 package com.heima.object import com.heima.bean.student public class demo4 equal...
Java Object類的介紹
object類的介紹 1 object類是所有類的根類。2 object是不斷抽取而來,具備著所有物件都具備的共性內容。例子 class fu 這裡不寫extends object也是隱式的繼承object類。class zi extends fu class objectdemo 重要方法介紹 1...
java Object類的hashCode方法
1 返回該物件的雜湊碼值。預設情況下,該方法會根據物件的位址來計算。2 不同物件的,hashcode 一般來說不會相同。但是,同乙個物件的hashcode 值肯定相同。下方 public class demo1 hashcode 執行結果 366712642 366712642 1829164700...