جافا: ماذا، إذا كان أي شيء، مؤمن من قبل وسائل متزامنة وبصرف النظر عن الكائن أنها تنتمي إليها؟

StackOverflow https://stackoverflow.com/questions/609963

سؤال

والآن، وأنا لست متأكدا ما إذا كان هذا هو السؤال غبي، يرجى أن تتحملوني إذا كان.

هل قفل على كائن "العودية"، ط. ه. إذا كائنين لها ما يشير إلى كائن ثالث في حقولهم وموضوع يشغل طريقة متزامنة على واحد من اثنين، يمكن أي وصول ترابط آخر الكائن الثالث؟

// a and b are some objects that implement Runnable
// they both reference the same third object
a.ref = c;
b.ref = c;

// a is run in a thread and processes some data in a loop for a long time
// the method the loop belongs to is declared synchronized
threadA = new Thread(a);
threadA.start();

a.someSyncedMethod(); // this would block ...
b.ref.someOtherSyncedMethod(); // ... but would this?
a.ref.someOtherSyncedMethod(); // ... and how about this?
هل كانت مفيدة؟

المحلول

ومن الجدير الفصل بين مفهومي "قفل" و "تأمين كائن". ليس هناك فكرة حقيقية عن "تأمين كائن" - هناك "الحصول على (والإفراج عن)" القفل <م> المرتبطة كائن. نعم، وهذا يبدو وكأنني نيتبيكينج - ولكن الفرق هو مهم جدا لأنه إذا كنت تتحدث عن وجود <م> الكائن حبسهم يبدو مثل أي مواضيع أخرى سوف تكون قادرة على تغيير أي شيء في وجوه في حين أن القفل هو عقد.

وبدلا من ذلك، بل يعني فقط أن أي موضوع آخر سوف تكون قادرة على الحصول على نفس القفل في حين يقام القفل. ليس هناك علاقة مباشرة بين القفل وأي من محتويات الكائن الذي يرتبط مع قفل.

أعلن

وطرق "متزامنة" الحصول على قفل المرتبطة مثيل الكائن التي ينتمون إليها. وهذا يجعل فقط أساليب أخرى متزامنة على نفس الانتظار وجوه، والبيانات المتزامنة التي مزامنة صراحة على ذلك.

وأنا شخصيا لا أحب طرق متزامنة - أنا أحب لجعله أكثر وضوحا من خلال مزامنة صراحة على (النهائي الخاص) متغير العضو الذي يستخدم فقط لمزامنة

نصائح أخرى

<اقتباس فقرة>
a.someSyncedMethod(); // this would block ...

وفقط إذا قمت بوضع علامة إما طريقة المدى مع رمز المدى ThreadA متزامنة أو لديك في أساليب متزامنة.

في لJVM، يملك كل كائن ما يعرف الشاشة. موضوع واحد فقط يمكن أن تمتلك الشاشة المقترنة مع كائن معين في وقت واحد. تزامن هو الوسيلة التي تخبر الترابط الحالي ليذهب للحصول على الشاشة قبل المتابعة.

وأيضا الفئة نفسها تملك جهاز لأساليب ثابتة.

وومعنى "القفل" (في الواقع وهذا ما يسمى البديل رصد) هو تماما اتفاقية، يتم فرض أي قيود الوصول.

ويعتمد الأداء على كافة الكائنات كونها تصرفت بشكل جيد والحصول على قفل المقابلة قبل الوصول إلى البيانات. فقط عن طريق التغليف هذا السلوك المرغوب فيه داخل في فئة مع وجود ضوابط الوصول المناسبة يمكنك تطبيقه للكائنات العميل.

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