同步容器的問題

同步容器有哪些
  • Vsetor, Hashtable. . .它們都是線程安全的容器,對於每一個方法都提供了同步的方法。
同步容器的問題
  • 對於這些容器的複合操作是非線程安全的,這些複合操做包括:

迭代 。它是指反覆獲取一個元素,知道獲取容器的最後一個元素。
導航。根據一定的順序查找下一個元素。
條件運算。比如比如查詢容器中是否包含某個值,如果包含就移除該值

public static Object getLast(vector v){
   int lastIndex=v.size()-1;
   return v.get(lastIndex);
}
public static void deleteLast(vector v){
   int lastIndex=v.size()-1;
   return v.delete(lastIndex);
}
/**
這個就是容器的一個複合操作,但是它不是線程安全的操作.
如果一個線程A正在讀取最後一個數值,但是此時線程B在線程A讀取了lastIndex之後就刪除的最後一個值,這時候就會產生數組越界的異常問題。
*/

解決這個問題
  • 可以通過在客戶端加鎖的方式去解決這個問題
  • 比如
public static Object getLast(vector v){
   synchronized (v);
   int lastIndex=v.size()-1;
   return v.get(lastIndex);
}
public static void deleteLast(vector v){
synchronized (v);
   int lastIndex=v.size()-1;
   return v.delete(lastIndex);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章