標籤:
1. SynchronizedMap和ConcurrentHashMap有什麼區別?
答:java5中新增了ConcurrentMap介面和它的一個實作類別ConcurrentHashMap。ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的鎖機制。比起synchronizedMap來,它提供了好得多的並發性。多個讀操作幾乎總可以並發地執行,同時進行的讀和寫操作通常也能並發地執行,而同時進行的寫操作仍然可以不時地並發進行(相關的類也提供了類似的多個讀線程的並發性,但是,只允許有一個活動的寫線程)。Hashtable中採用的鎖機制是一次鎖住整個hash表,從而同一時刻只能由一個線程對其進行操作;而ConcurrentHashMap中則是一次鎖住一個桶。ConcurrentHashMap預設將hash表分為16個桶,諸如get,put,remove等常用操作只鎖當前需要用到的桶。這樣,原來只能一個線程進入,現在卻能同時有16個寫線程執行,並發效能的提升是顯而易見的。前面說到的16個線程指的是寫線程,而讀操作大部分時候都不需要用到鎖。只有在size等操作時才需要鎖住整個hash表。 在迭代方面,ConcurrentHashMap使用了一種不同的迭代方式。在這種迭代方式中,當iterator被建立後集合再發生改變就不再是拋出ConcurrentModificationException,取而代之的是在改變時new新的資料從而不影響原有的資料 ,iterator完成後再將頭指標替換為新的資料 ,這樣iterator線程可以使用原來老的資料,而寫線程也可以並發的完成改變。
2. CopyOnWriteArrayList可以用於什麼應用情境?
答:CopyOnWriteArrayList(免鎖容器)的好處之一是當多個迭代器同時遍曆和修改這個列表時,不會拋出ConcurrentModificationException。在CopyOnWriteArrayList中,寫入將導致建立整個底層數組的副本,而源數組將保留在原地,使得複製的數組在被修改時,讀取操作可以安全地執行。
Java面試題-並發架構