【发布时间】:2016-02-05 17:25:55
【问题描述】:
假设我有以下代码:
private ConcurrentHashMap<Integer, Book> shelf;
public Library(ConcurrentHashMap<Integer, Book> shelf){
this.shelf = new ConcurrentHashMap<Integer, Book>(shelf);
}
鉴于我使用的是线程安全集合,以下方法可以使用还是我需要担心线程安全?
public void addBook(int index, Book add){
shelf.put(index, add);
}
如果上述方法使用起来不安全,添加同步是否是正确的方法?像这样,
public synchronized void addBook(int index, Book add){
shelf.put(index, add);
}
【问题讨论】:
-
你不需要担心他们AFAIK的线程安全
-
@Leo,只要线程之间有数据共享,您就需要担心线程安全。使用线程安全的类意味着您不必担心该类的任何 single 实例的内部一致性,但如果您的代码依赖于 between 两个实例的一致性或更多对象,那么你的代码将需要实现某种同步来保证一致性。每个单独的对象内部一致的事实不足以解决您的问题。
标签: java multithreading