Spring bean的singleton/session作用域是否需要對其所有字段的訪問權限進行同步?通過「synchronized」關鍵字或使用「java.util.concurrent」包中的某些類說。Spring:Singleton/session作用域和併發性
舉例來說,這段代碼是不是線程安全的? (複製/ here pased):
@Component
@SessionScoped
public class ShoppingCart {
private List<Product> items = new ArrayList<Product>();
public List<Product> getAllItems() {
return items;
}
public void addItem(Product item) {
items.add(item);
}
}
如果有人調用getItems()並開始迭代它,而同時另一個線程執行addItem(),則會導致ConcurrentModificationException異常。請參閱http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html以獲取關於需要使用ArrayList同步線程安全性的說明。 – 2009-11-17 02:27:00
該類不是線程安全的,因爲'items'集合未被安全地發佈; items.add()不提供任何保證,它的效果對於線程來說比當前可見並且不是原子的。 – 2009-11-17 05:29:07
嗯我的印象是這個類也是'SessionScoped',只能由Spring容器中的一個actor來執行,這樣可以確保類的線程安全嗎? – 2009-11-17 12:42:53