wat java_并发工具优于wati、notify(69)
現在幾乎沒有理由在使用wait 和 notify,使用高級工具代替
java.util.concurrent 包并發工具分三類:
Executor 框架
并發集合(concurrent Collection)
同步器(synchronizer)
并發集合
對標準集合接口(List、Map、Queue)封裝了高性能的并發實現
為了提高并發性,實現了內部管理同步
除非不得已,請優先使用ConcurrentHashMap
相較于普通 Map ,極大提升了性能
String#intern方法中看到,
這個方法是一個 native 的方法,但注釋寫的非常明了。
“如果常量池中存在當前字符串, 就會直接返回當前字符串.
如果常量池中沒有此字符串, 會將此字符串放入常量池中后, 再返回”。
阻塞操作(BlockingQueue)::
一直阻塞直到被成功執行為止
take 方法刪除并返回頭元素,隊列為空就等待
大部分 ExecutorService 都是用Blockingqueue
同步器(Synchronizer)::
使一個線程能夠等待另一個線程,允許他們協調動作
常用同步器有semaphore、CountDownLatch
不常用的有CyclicBarrier、ExChanger
倒計數鎖存器(CountDownLatch)::
System.nanoTime()
精度更高
優先使用他,而不是currentTimeMillis
用于計算時間差
使用wait
始終應該使用循環模式來調用wait
永遠不要在循環外調用wait
循環會在等待之前和之后調用測試條件
(!!!這個很重要,這就是這里 while 不能換成if的原因)
在多線程的編程實踐中,wait()的使用方法如下:
循環里面就一個wait 語句,別的事都不做
synchronized (monitor) {
// ?判斷條件謂詞是否得到滿足
while(!locked) {
// ?等待喚醒
monitor.wait();
}
// ?處理其他的業務邏輯
}
那為什么非要while判斷,而不采用if判斷呢?如下:
synchronized (monitor) {
// 判斷條件謂詞是否得到滿足
if(!locked) {
// 等待喚醒
monitor.wait();
}
// 處理其他的業務邏輯
}
總結
以上是生活随笔為你收集整理的wat java_并发工具优于wati、notify(69)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Holt-Winters-季节性预测算法
- 下一篇: zblog php 七牛缩略图,zblo