【发布时间】:2013-12-20 10:52:05
【问题描述】:
我知道staticsynchronized 方法锁定在class 对象上,而实例synchronized 方法锁定在对象的当前实例上,即this。
由于这两个对象不同,它们具有不同的锁,因此当一个线程正在执行 static synchronized 方法时,java 中的其他线程不需要等待该线程返回,而是会获得单独的锁。
考虑下面的例子
public class Test {
static int count = 0;
public synchronized void f1(){
count++;
}
public static synchronized void f2(){
count++;
}
}
此处共享计数不以互斥方式访问,这可能导致将错误的count 传递给f1() 的调用者,而另一个线程正在使用static f2() 方法递增count。
这种情况有什么解决办法?如果不是,我是否在问正确的问题,请让我正确?如果这是一个真实的情况,那么 java 会避免什么解决方案?
【问题讨论】:
标签: java multithreading synchronization static-methods static