2

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

骨架使用模式是::

当前使用情况::

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

4

2 回答 2

3

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

于 2010-09-01T11:39:27.007 回答
2

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

于 2010-09-01T11:40:39.967 回答