java 概念知識

  1. 檢測一個線程是否擁有鎖:java

    Java.lang.Tread 中的 holdsLock 方法:api

     public static native boolean holdsLock(Object obj);測試

    返回true :線程擁有某個對象的鎖this

    Thread.currentThread().holdsLock(this)
    spa

  2. wait,notify,notifyall() 在 object 裏面,不在Thread線程

    java 提供的鎖是對象級的,而不是線程級的,每一個對象都有鎖,經過線程得到,若是線程須要等待某些鎖對象

    那麼調用對象中的wait 方法就有意義,,若是定義在Thread中,線程等待的那個鎖就不明顯了,總結:wait,隊列

    notify,notifyall,都是鎖基本的操做,因此他們定義在Object中由於鎖屬於對象it

    調用wait,notify,notifyall 的線程必須擁有對象鎖(java api 規定,防止競爭條件)object

  3. 判斷一個 類是否相等

    1. 包名,類名

    2. 類加載器

  4.  LockSupport.park()和unpark(),與object.wait()和notify()的區別?

    1.  面向的主體不同。LockSuport主要是針對Thread進進行阻塞處理,能夠指定阻塞隊列的目標對象,每次能夠指定具體的線程喚醒。Object.wait()是以對象爲緯度,阻塞當前的線程和喚醒單個(隨機)或者全部線程。

    2.  實現機制不一樣。雖然LockSuport能夠指定monitor的object對象,但和object.wait(),二者的阻塞隊列並不交叉。能夠看下測試例子。object.notifyAll()不能喚醒LockSupport的阻塞Thread.

相關文章
相關標籤/搜索