Блокировка получения статических элементов в классе Java - PullRequest
2 голосов
/ 01 сентября 2010

В настоящее время я решаю проблему снижения производительности из-за сильной конкуренции за блокировку. Я рассматриваю "Блокирование разделения", чтобы решить эту проблему.

Шаблон использования скелета: ::

ТЕКУЩЕЕ ИСПОЛЬЗОВАНИЕ ::

public class HelloWorld{

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

}

МОЙ ПОДХОД ::

, поскольку method1() и method2() не используют один и тот же ресурс, я думаю о разделении блокировок. На данный момент они оба борются за блокировку Класса, поскольку они оба статически синхронизированы. Я думаю изменить его на ::

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?

Ответы [ 2 ]

3 голосов
/ 01 сентября 2010

Теперь они будут бороться за 2 объекта "resr1Lock" / "resrc2Lock. Это будет работать, как вы ожидаете.

2 голосов
/ 01 сентября 2010

Они больше не будут бороться за блокировку объекта Class, так что да, это решит эту проблему.

...