الثابت مقابل المتطاير في Java: توضيح الفرق بين التطبيقات متعددة الخيوط
في Java، يلعب مفهوما الثابت والمتقلب دورًا حاسمًا في التحكم في النطاق المتغير والرؤية عبر المواضيع. على الرغم من أن هذه المصطلحات غالبًا ما تبدو قابلة للتبديل، إلا أنها تظهر في الواقع سلوكيات مميزة تؤثر على أداء التطبيق وصحته.
ما هو الثابت مقابل المتغير؟
]Volatile != Static
أحد المفاهيم الخاطئة الشائعة هو ذلك volatile يعني وجود نسخة واحدة من المتغير في كافة سلاسل الرسائل. ومع ذلك، هذا ليس هو الحال. يضمن Volatile فقط أن يتم مسح نسخ ذاكرة التخزين المؤقت لمؤشر الترابط المحلي على الفور بدلاً من احتمال انتظار التحديثات من سلاسل الرسائل الأخرى.
قد تكون المتغيرات الثابتة قابلة للوصول بواسطة جميع سلاسل الرسائل، ولكن هذا لا يعني أنه لا يتم تخزينها مؤقتًا محليًا بواسطة سلاسل الرسائل. . يمكن أن يؤدي هذا إلى مواقف تحتوي فيها سلاسل الرسائل على قيم قديمة في ذاكرة التخزين المؤقت المحلية الخاصة بها.
لماذا تستخدم المتطايرة؟
بينما يمكن أن تكون المتغيرات الثابتة مفيدة لمشاركة البيانات بين جميع سلاسل الرسائل في فئة، فإنها يمكن أن تكون مشكلة في سيناريوهات متعددة مؤشرات الترابط. بدون المزامنة المناسبة، يمكن أن يؤدي وصول عدة سلاسل رسائل إلى قيمة ثابتة إلى تلف البيانات.
توفر المتغيرات المتغيرة طريقة لتجنب مشكلات التزامن هذه. من خلال الإعلان عن متغير كمتغير، فإننا نجبر سلاسل الرسائل على قراءة القيمة العالمية دائمًا وعدم الاعتماد على القيم المخزنة مؤقتًا.
متى يتم استخدام Static vs Volatile
تنبيه: المتقلبة ليست بديلاً للمزامنة
في حين أن المتقلبة تضمن الرؤية، إلا أنها لا تضمن الذرية أو العمليات الآمنة للخيط. بالنسبة للمهام التي تتطلب عمليات متزامنة، يجب عليك استخدام أوليات المزامنة المناسبة مثل الأقفال أو فئة AtomicInteger.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3