سؤال

أقوم حاليًا بحل مشكلة تدهور الأداء بسبب خلاف القفل الثقيل. أنا أفكر في "تقسيم القفل" لحل هذه المشكلة.

نمط الاستخدام الهيكلي هو ::

الاستخدام الحالي ::

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 ?

هل كانت مفيدة؟

المحلول

سوف يتنافسون الآن على كائنين "Resr1lock"/"Resrc2lock. سيعمل كما تتوقع.

نصائح أخرى

لن يتنافسون على قفل على Class الكائن بعد الآن ، نعم هذا سيحل هذه المشكلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top