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的實現提供更多的功能。
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的實現提供更多的功能。