以下是否意味着只有一个线程可以在对象的任何方法中?或者多个线程可以在不同的方法中只是不一样?为什么呢?
public class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public synchronized int value() {
return c;
}
}
答案 0 :(得分:2)
以下是否意味着只有一个线程可以在对象的任何方法中?
是。非静态synchronized
方法在this
上隐式同步。它相当于:
public void increment() {
synchronized(this) {
c++;
}
}
如果这是一段真正的代码(I know it's not),我建议您完全抛弃SynchronizedCounter
课程并改为使用AtomicInteger
。
答案 1 :(得分:2)
以下是否意味着只有一个线程可以在对象的任何方法中?
对于您的具体示例,是的,因为所有方法都是同步的并且是非静态的。
如果您的类有任何未同步的方法,则不会阻止未同步的方法。
如果你的类使用synchronized块而不是方法并在不同的锁上同步它们,那么它可能会变得更加复杂。
答案 2 :(得分:0)
当然,它们是synchronized
对象上的this
。如果您为自己的不同方法编写了自己的synchronized
块,其中包含不同的对象,则不会出现这种情况。