回覆列表
  • 1 # 淺析架構

    1.wait/notify是Object提供的native方法,可以用來執行緒之間的通訊。

    wait/notify結合synchronized可以實現一個執行緒安全的訊息佇列。

    2、BlockingQueuee

    1、阻塞(put、take)

    2、拋異常(add,remove)

    3、阻塞等待超時(offer,poll)

    4、返回特殊值(offer,poll)

    BlockingQueue是個介面,JDK也提供了相應的實現,實現中主要使用Lock和Condition,Condition有await和signal方法,類似wait和notify方法。

    想要了解Lock的機制或者自己要實現一個鎖,就得了解

    AQS(AbstractQueuedSynchronizer)是什麼了,Lock的具體實現

    ReentrantLock,ReadLock, WriteLock都是基於

    AQS實現的,這裡暫時不說AQS了,說下 BlockingQueue具體的幾個實現:

    1、ArrayBlockingQueue:有界佇列,底層是陣列

    2、LinkedBlockingQueue:無界佇列,底層是個單向連結串列

    3、 SynchronousQueue:同步佇列,不提供任何容器來存放資料

    4、PriorityBlockingQueue:優先順序無界佇列,底層是二叉樹最小堆

    5、DelayQueue:支援延時獲取元素的無界阻塞佇列。底層是使用 PriorityQueue來實現。

    所以,wait/notify和BlockingQueue都可以實現訊息佇列,解決生產者和消費者的問題。不過BlockingQueue的實現提供更多的功能。

  • 中秋節和大豐收的關聯?
  • 為什麼把楊志叫“青面獸”、李逵叫“黑旋風”、宋江叫“及時雨”?