導航:首頁 > 編程語言 > javautilconcurrent

javautilconcurrent

發布時間:2022-08-12 00:18:48

1. 為什麼java.util.concurrent包沒有concurrentList

ArrayList的實現類在collection介面下,而在concurrent裡面的一部分類只不過繼承了Map的抽象類而已,當然不可能找到不是一個結構下的東西了,希望對你有用!你可以多看一下API參考手冊,就都知道了。

2. 如何正確的使用java.util.ConcurrentLinkedQueue

如果直接使用它提供的函數,比如:queue.add(obj); 或者 queue.poll(obj);,這樣我們自己不需要做任何同步。但如果是非原子操作,比如:

Java代碼

if(!queue.isEmpty()) {

queue.poll(obj);

}
if(!queue.isEmpty()) {
queue.poll(obj);
}

我們很難保證,在調用了 isEmpty() 之後,poll() 之前,這個 queue 沒有被其他線程修改。所以對於這種情況,我們還是需要自己同步:

Java代碼

synchronized(queue) {

if(!queue.isEmpty()) {

queue.poll(obj);

}

}

3. java.util.concurrent.Future.isDone是否有必要

有必要,因為get方法會一直等待資源返回,可以用isDone判斷 Future.get()方法會一直阻塞,直到有數據返回,這時候isDone()是true.那麼在get()之前判斷isDone()是否有必要?如下: if (!future.isCancelled()) { HotelSearchResponse response = ...

4. 為什麼會出現 java.util. 異常

當方法檢測到對象的並發修改,但不允許這種修改時,拋出此異常。
例如,某個線程在 Collection 上進行迭代時,通常不允許另一個線性修改該 Collection。通常在這些情況下,迭代的結果是不確定的。如果檢測到這種行為,一些迭代器實現(包括 JRE 提供的所有通用 collection 實現)可能選擇拋出此異常。執行該操作的迭代器稱為快速失敗 迭代器,因為迭代器很快就完全失敗,而不會冒著在將來某個時間任意發生不確定行為的風險。
注意,此異常不會始終指出對象已經由不同 線程並發修改。如果單線程發出違反對象協定的方法調用序列,則該對象可能拋出此異常。例如,如果線程使用快速失敗迭代器在 collection 上迭代時直接修改該 collection,則迭代器將拋出此異常。
注意,迭代器的快速失敗行為無法得到保證,因為一般來說,不可能對是否出現不同步並發修改做出任何硬性保證。快速失敗操作會盡最大努力拋出 。因此,為提高此類操作的正確性而編寫一個依賴於此異常的程序是錯誤的做法,正確做法是: 應該僅用於檢測 bug。

5. java.util.concurrent的隊列

java.util.concurrent ConcurrentLinkedQueue 類提供了高效的、可伸縮的、線程安全的非阻塞 FIFO 隊列。java.util.concurrent 中的五個實現都支持擴展的 BlockingQueue 介面,該介面定義了 put 和 take 的阻塞版本:LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue、PriorityBlockingQueue 和 DelayQueue。這些不同的類覆蓋了生產者-使用者、消息傳遞、並行任務執行和相關並發設計的大多數常見使用的上下文。

6. java.util.concurrent.onwritearrayset有什麼作用

CopyOnWriteArrayList和CopyOnWriteArraySet是線程安全的集合,其中所有的修改線程對底層數組進行復制。當在這種集合上構建迭代器時,迭代器包含的是當前底層數組的引用。如果數組在迭代器構建後被修改,迭代器引用的仍然是舊數組。所以訪問這種集合時無須同步開銷。

當迭代線程數大於修改線程數時,CopyOnWriteArrayList的性能優於同步的ArrayList,反之,同步的ArrayList優於CopyOnWriteArrayList。CopyOnWriteArraySet同理。

7. java.util.

這個問題是說,你不能在對一個List進行遍歷的時候將其中的元素刪除掉
解決辦法是,你可以先將要刪除的元素用另一個list裝起來,等遍歷結束再remove掉
可以這樣寫
List delList = new ArrayList();//用來裝需要刪除的元素
for(Information ia:list)
if(ia.getId()==k){
n++;
delList.add(ia);
}
list.removeAll(delList);//遍歷完成後執行刪除

8. 如何解決java.util.

原因:Iterator做遍歷的時候,HashMap被修改(bb.remove(ele), size-1),Iterator(Object ele=it.next())會檢查HashMap的size,size發生變化,拋出錯誤。

解決辦法:
1) 通過Iterator修改Hashtable
while(it.hasNext()) {
Object ele = it.next();
it.remove();
}
2) 根據實際程序,您自己手動給Iterator遍歷的那段程序加鎖,給修改HashMap的那段程序加鎖。

3) 使用「ConcurrentHashMap」替換HashMap,ConcurrentHashMap會自己檢查修改操作,對其加鎖,也可針對插入操作。
import java.util.concurrent.*;

閱讀全文

與javautilconcurrent相關的資料

熱點內容
牙科用空氣壓縮機 瀏覽:255
在linux上卸載jdk 瀏覽:764
演算法軟體實現 瀏覽:837
pdf怎麼列印小冊子 瀏覽:907
qt只編譯核心組件 瀏覽:2
java線程阻塞的方法 瀏覽:823
高精PDF 瀏覽:677
如何查加密的取貨碼 瀏覽:884
java命令行內存 瀏覽:63
安卓微信怎麼取消地區顯示空白 瀏覽:678
吃雞滑鼠宏編程 瀏覽:983
空氣壓縮機油系統跑油分析 瀏覽:749
雲伺服器消耗什麼 瀏覽:713
androidhome重新啟動 瀏覽:479
英雄聯盟手游比賽用的什麼伺服器 瀏覽:255
伺服壓力機怎麼編程 瀏覽:843
數控車內半圓怎麼編程實例 瀏覽:875
bat編譯lan和錯誤檢測 瀏覽:41
java抓取圖片 瀏覽:118
編譯程序求矩形面積和周長 瀏覽:146