هذه كلاهما يستخدم الأقفال الجوهرية. مثالك الأول هو استخدام القفل الجوهري لـ lock
, ، في حين أن الثانية تستخدم القفل الجوهري لـ this
. والسؤال هو ما إذا كان this
هو حقا ما تريد قفله ، وهو ما لا يزيد في كثير من الأحيان.
فكر في القضية ، عند استخدامك synchronized(this)
داخل إحدى طرقك. لديك كائنان من هذه الفئة ، وهذه الكائنات تشير إلى بعض الموارد المشتركة. إذا قفلت this
ثم لن يكون لديك حصرية متبادلة لهذا المورد. تحتاج إلى قفل بعض الكائنات أن كل ما يمكنه الوصول إلى المورد يمكنه الوصول إليه.
مفتوح القفل this
فقط إذا كان المورد المهم جزءًا من الفصل نفسه. حتى في بعض الحالات ، يكون كائن القفل أفضل. أيضًا ، إذا كان هناك العديد من الموارد المختلفة في صفك ، فلا تحتاج إلى أن تكون حصرية متبادلة ككل ، ولكن بشكل فردي ، فأنت بحاجة إلى العديد من كائنات القفل.
المفتاح هو أن تعرف حقًا كيف متزامن يعمل ، وكن على دراية بما يفعله رمزك بالفعل