الأشياء التي يجب مراعاتها عند كتابة تعليمات برمجية آمنة لمؤشر الترابط:
1. المتغيرات المشتركة
2. المتغيرات القابلة للتغيير
Shared تعني أن عدة سلاسل رسائل يمكنها الوصول إليها في نفس الوقت، والقابلة للتغيير تعني أن قيمتها يمكن أن تتغير خلال دورة حياتها.
على سبيل المثال، متغير العدد التالي:
انسخ رمز الكود كما يلي:
// فئة الموضوع غير الآمنة
الطبقة العامة UnsafeCount {
Private int count = 0; // هذا المتغير مشترك
public void rise() { // لا توجد آلية مزامنة هنا، ويمكن الوصول إلى سلاسل رسائل متعددة في نفس الوقت
count++; // هذا المتغير متغير
}
كثافة العمليات العامة getCount() {
عدد الإرجاع؛
}
}
هناك 4 طرق لإصلاح هذه المشكلة:
1. بدلاً من مشاركة متغير الحالة بين سلاسل الرسائل، يمكنك تغليف المتغير في طريقة (يجب أن تكون الكائنات عديمة الحالة آمنة لسلسلة الرسائل)؛ لأن المتغيرات الموجودة في الطريقة حصرية لكل مؤشر ترابط ولا تتم مشاركتها مع سلاسل رسائل أخرى. على سبيل المثال:
انسخ رمز الكود كما يلي:
إضافة كثافة العمليات العامة (عدد العمليات) {
return ++count;// يمكن القول هنا أيضًا أن الكائنات عديمة الحالة يجب أن تكون آمنة لمؤشر الترابط
}
2. قم بتعديل متغير الحالة إلى متغير غير قابل للتغيير.
انسخ رمز الكود كما يلي:
عدد صحيح نهائي خاص = 0؛
3. استخدم استراتيجية التزامن عند الوصول إلى متغيرات الحالة.
انسخ رمز الكود كما يلي:
زيادة الفراغ المتزامنة العامة () {
العد++;
}
4. استخدم فئات المتغير الذري.
انسخ رمز الكود كما يلي:
عدد AtomicInteger الخاص؛
زيادة الفراغ العام () {
count.getAndAdd(1);
}