(Java同步问题)作为我的标题,我可以在同步块中访问静态变量吗?它会导致不一致吗?任何人都可以告诉我访问静态变量同步块的缺点或优点的细节。
答案 0 :(得分:4)
我可以在同步块中访问静态变量吗?
是的,你可以。
会导致不一致吗?
静态意味着在JVM中该类的所有实例之间共享。共享资源不是线程安全的 .Hence静态变量不是线程安全的。因此,如果多个线程尝试访问静态变量,则可能导致不一致。
我知道用于同步访问静态变量的方法。
在静态对象上同步。
public class SomeClass{
private static int sum = 0;
private static final Object locker = new Object();
public void increaseSum() {
synchronized (locker) {
sum++;
}
}
}
同步静态方法。
public class SomeClass {
private static int sum = 0;
public static synchronized void increaseSum() {
sum++;
}
}
在类对象上进行同步
public class SomeClass {
private static int sum= 0;
public void increaseSum() {
synchronized (SomeClass .class) {
sum++;
}
}
}