(Java同步问题)如题,可以访问同步块中的静态变量吗?会不会造成不一致?谁能告诉我访问静态变量同步块的缺点或优点的详细信息。
问问题
3767 次
1 回答
4
我可以访问同步块中的静态变量吗?
是的你可以。
会不会造成不一致?
静态意味着在 JVM 中该类的所有实例之间共享。共享资源不是线程安全的。因此静态变量不是线程安全的。因此,如果多个线程尝试访问一个静态变量,可能会导致不一致。
我所知道的同步访问静态变量的方法。
在静态对象上同步。
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++; } } }
于 2013-04-28T15:15:52.833 回答