檢測一個線程是否擁有鎖:java
Java.lang.Tread 中的 holdsLock 方法:api
public static native boolean holdsLock(Object obj);測試
返回true :線程擁有某個對象的鎖this
Thread.currentThread().holdsLock(this)
spa
wait,notify,notifyall() 在 object 裏面,不在Thread線程
java 提供的鎖是對象級的,而不是線程級的,每一個對象都有鎖,經過線程得到,若是線程須要等待某些鎖對象
那麼調用對象中的wait 方法就有意義,,若是定義在Thread中,線程等待的那個鎖就不明顯了,總結:wait,隊列
notify,notifyall,都是鎖基本的操做,因此他們定義在Object中由於鎖屬於對象it
調用wait,notify,notifyall 的線程必須擁有對象鎖(java api 規定,防止競爭條件)object
判斷一個 類是否相等
1. 包名,類名
2. 類加載器
LockSupport.park()和unpark(),與object.wait()和notify()的區別?
1. 面向的主體不同。LockSuport主要是針對Thread進進行阻塞處理,能夠指定阻塞隊列的目標對象,每次能夠指定具體的線程喚醒。Object.wait()是以對象爲緯度,阻塞當前的線程和喚醒單個(隨機)或者全部線程。
2. 實現機制不一樣。雖然LockSuport能夠指定monitor的object對象,但和object.wait(),二者的阻塞隊列並不交叉。能夠看下測試例子。object.notifyAll()不能喚醒LockSupport的阻塞Thread.