導航:首頁 > 編程語言 > 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相關的資料

熱點內容
程序員骨腫瘤上熱搜 瀏覽:847
聚優電影 瀏覽:43
國企保底工資演算法 瀏覽:730
視聽說伺服器地址是什麼意思 瀏覽:657
一部男主叫大志的電影叫 瀏覽:650
安卓反編譯後編譯不回來 瀏覽:195
快穿肉文推薦 瀏覽:263
lol新手推薦什麼伺服器 瀏覽:283
尼桑奇駿壓縮機 瀏覽:170
android模態對話框 瀏覽:793
手機為什麼無法接到伺服器 瀏覽:627
背景虛化人物清晰哪個app 瀏覽:657
android開發職位 瀏覽:764
勒索病毒加密文件特徵識別 瀏覽:815
小車控制源碼 瀏覽:9
程序員右手筋脈疼痛沒力 瀏覽:841
手機視頻太大如何壓縮 瀏覽:555
出租伺服器怎麼用 瀏覽:229
鬼六所有的電影 瀏覽:968
java集成spring 瀏覽:352