【问题标题】:Lock acquistion on static members within a Java Class锁定 Java 类中静态成员的获取
【发布时间】:2010-09-01 11:37:31
【问题描述】:

我目前正在解决由于严重的锁争用导致的性能下降问题。我正在考虑使用“锁拆分”来解决此问题。

骨架使用模式是::

当前使用情况::

public class HelloWorld{

   public static synchronized method1(){
       //uses resource 1
   }
   public static synchronized method2(){
        //uses resource 2
   }

}

我的方法::

由于method1()method2() 不使用相同的资源,我正在考虑拆分锁。到目前为止,它们都在争夺 Class 锁,因为它们都是静态同步的。我正在考虑将其更改为 ::

public class HelloWorld{

   **private static Object resr1Lock = new Object();**

   public static method1(){
       synchronized(resrc1Lock){
            //uses resource 1
       }
   }

   **private static Object resr2Lock = new Object();** 
   public static method2(){
        synchronized(resrc2Lock){
             //uses resource 2
        }
   }

}

他们现在会争夺“班级锁”还是resr1Lock/resrc2Lock

【问题讨论】:

  • 非常感谢,伙计们。它确实提高了性能:-) [提高了近 20 倍]。另一个引人注目的案例研究,用于分析任何应用程序中的同步模式
  • 既然 method1() 和 method2() 不使用共享资源,为什么还要使用同步?

标签: java concurrency static-members synchronized


【解决方案1】:

他们现在将争夺“resr1Lock”/“resrc2Lock”这 2 个对象。它将按您的预期工作。

【讨论】:

    【解决方案2】:

    他们将不再争夺Class 对象的锁定,所以是的,这将解决这个问题。

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 2022-12-17
      • 2014-02-17
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多