0

(Java同步问题)如题,可以访问同步块中的静态变量吗?会不会造成不一致?谁能告诉我访问静态变量同步块的缺点或优点的详细信息。

4

1 回答 1

4

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

是的你可以。

会不会造成不一致?

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

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

  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++;
         }
       }
     } 
    
于 2013-04-28T15:15:52.833 回答