当我们谈论数据结构时,我听到适用于变量的相同规则不适用。这是真的吗?
例如,这是完全没法的
public class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public synchronized int value() {
return c;
}
}
并不意味着以下内容能够完美运作。
public class SynchronizedDataStructures {
private ArrayList<String> c = new ArrayList<String>();
public synchronized void add1(element) {
c.add(element);
}
public synchronized void clear1() {
c.clear();
}
public synchronized int value() {
return c;
}
}
这是真的,我该怎么做才能使它适用于数据结构?
答案 0 :(得分:1)
如果您将add1(element)
更改为add1(String element)
,并删除value()
方法,则会进行编译,并且是线程安全的。
您需要一种正确访问列表内容的方法。 e.g。
public synchronized int value(int index) {
return c.get(index);
}
答案 1 :(得分:1)
有一种更简洁的方法可以同步对象,而不是完整的方法。考虑一下:
...
public void clear1() {
synchronized(c) {
c.clear();
}
}
...
http://tutorials.jenkov.com/java-concurrency/synchronized.html
这是Java中synchronized的一个很好的解释。