عندما نتحدث عن سلامة الخيط، سنختار طريقة القفل لحلها. تنقسم أنواع الأقفال في Java إلى ستة أنواع. طريقتا القفل الأكثر شيوعًا التي واجهناها هما القفل والمزامنة، وهذا أيضًا هو السؤال الأكثر شيوعًا حول المبدأ والآلية في المقابلات. سنعرض لك أدناه أسئلة المقابلة الشائعة في Java، دعنا نرى ما إذا كان بإمكانك الإجابة عليها جميعًا.
1.الفرق بين التأثيرات المتزامنة على الطرق الساكنة والطرق غير الساكنة
الطرق غير الساكنة:
قفل الكائن (يمكن فهمه على أنه قفل ذاكرة هذا الكائن. لاحظ أن هذه الذاكرة فقط، والكائنات الأخرى المشابهة سيكون لها قفل الذاكرة الخاص بها في هذا الوقت، يتم تنفيذ طريقة مزامنة الكائن في أكثر من واحد). الخيط الآخر (ملاحظة: هو الكائن) سيولد استبعادًا متبادلاً
الطريقة الثابتة : تعادل قفل الفئة (*.class موجود في منطقة التعليمات البرمجية، والطريقة الثابتة موجودة في المنطقة الثابتة. الكائنات التي تم إنشاؤها بواسطة هذه الفئة تشترك في هذه الطريقة الثابتة، لذلك تتنافس كائنات N على هذه الذاكرة)،
في هذا الوقت ، طالما يتم استدعاء الكائن الذي تم إنشاؤه بواسطة هذه الفئة، سيحدث الاستبعاد المتبادل عند استدعاء هذه الطريقة الثابتة. أي أن جميع كائنات هذه الفئة تشترك في القفل.
2. ما هي أنواع القفل؟
(١) القفل المتفائل والقفل المتشائم
(2) قفل الدوران وقفل عدم الدوران
(3) قفل إعادة الدخول وقفل عدم إعادة الدخول
(4) قفل بدون قفل وخفيف الوزن وقفل متحيز وقفل ثقيل الوزن
(5) قفل Mutex وقفل مشترك
(6) القفل العادل والقفل غير العادل
3. عدة طرق لمزامنة الخيط
تعديل متزامن
مزامنة الأدوات المتطايرة (يتم ضمان الرؤية فقط، وليس الذرية)
استخدم المتغير المحلي ThreadLocal
استخدام الفئات الذرية ( AtomicInteger، AtomicBoolean...)
استخدم القفل
استخدم فئة الحاوية ( قائمة انتظار الحظر، ConcurrentHashMap)
4. الفرق بين الآليات المتزامنة والقفل
استخدمت المزامنة في الأصل آلية القفل المتشائمة لوحدة المعالجة المركزية، أي أن الخيط حصل على قفل حصري. القفل الحصري يعني أن الخيوط الأخرى لا يمكنها الاعتماد إلا على الحظر لانتظار الخيط لتحرير القفل.
يستخدم القفل قفلًا متفائلًا. ما يسمى بالقفل المتفائل هو إكمال العملية دون القفل في كل مرة، ولكن بافتراض عدم وجود تعارض. إذا فشلت بسبب تعارض، فستتم إعادة المحاولة حتى تنجح. آلية تنفيذ القفل المتفائل هي عملية CAS (المقارنة والتبديل).
5. تحدث عن مشكلات سلامة الخيط
تعد سلامة الخيوط مشكلة في مجال الخيوط المتعددة، ويمكن فهم سلامة الخيوط ببساطة على أنها طريقة أو مثال يمكن استخدامه في بيئة متعددة الخيوط دون مشاكل.
في برمجة Java متعددة الخيوط، يتم توفير طرق متعددة لتحقيق أمان سلسلة Java:
إن أبسط طريقة هي استخدام الكلمة الأساسية "المزامنة".
استخدم الفئات الذرية من الحزمة java.util.concurrent.atomic، مثل AtomicInteger
استخدام الأقفال من الحزمة java.util.concurrent.locks
استخدم مجموعة ConcurrentHashMap الآمنة للخيط
استخدم الكلمة الأساسية المتقلبة لضمان الرؤية المتغيرة
ما سبق هو مقدمة لأسئلة المقابلة حول الأقفال في Java. بالنسبة لنقاط المعرفة التي لم تكن واضحة بشأنها، يجب عليك العثور على المعلومات في الوقت المناسب لحلها وتقوية ذاكرتك لمحتوى القفل.