访问同步块中的静态变量

时间:2013-04-28 14:29:38

标签: java synchronization

(Java同步问题)作为我的标题,我可以在同步块中访问静态变量吗?它会导致不一致吗?任何人都可以告诉我访问静态变量同步块的缺点或优点的细节。

1 个答案:

答案 0 :(得分:4)

我可以在同步块中访问静态变量吗?

是的,你可以。

会导致不一致吗?

静态意味着在JVM中该类的所有实例之间共享。共享资源不是线程安全的 .Hence静态变量不是线程安全的。因此,如果多个线程尝试访问静态变量,则可能导致不一致。

我知道用于同步访问静态变量的方法。

  1. 在静态对象上同步。

       public class SomeClass{
          private static int sum = 0;
          private static final Object locker = new Object();
    
          public void increaseSum() {
               synchronized (locker) {
               sum++;
          }
        }
      }
    
  2. 同步静态方法。

    public class SomeClass {
        private static int sum = 0;
    
       public static synchronized void increaseSum() {
         sum++;
     }
    }
    
  3. 在类对象上进行同步

     public class SomeClass {
        private static int sum= 0;
    
        public void increaseSum() {
           synchronized (SomeClass .class) {
           sum++;
         }
       }
     }