"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > ثابت مقابل متقلب في جافا: متى تحتاج إلى كل منهما؟

ثابت مقابل متقلب في جافا: متى تحتاج إلى كل منهما؟

تم النشر بتاريخ 2024-11-10
تصفح:359

Static vs Volatile in Java: When Do You Need Each?

الثابت مقابل المتطاير في Java: توضيح الفرق بين التطبيقات متعددة الخيوط

في Java، يلعب مفهوما الثابت والمتقلب دورًا حاسمًا في التحكم في النطاق المتغير والرؤية عبر المواضيع. على الرغم من أن هذه المصطلحات غالبًا ما تبدو قابلة للتبديل، إلا أنها تظهر في الواقع سلوكيات مميزة تؤثر على أداء التطبيق وصحته.

ما هو الثابت مقابل المتغير؟

]
  • الثابت تتم مشاركة المتغيرات عبر كافة مثيلات الفئة، بغض النظر عن عدد سياقات مؤشر الترابط. تحتوي كل فئة على متغير ثابت واحد فقط باسم معين.
  • المتغيرات ، من ناحية أخرى، مضمونة لتكون مرئية لجميع المواضيع. ومع ذلك، على عكس المتغيرات الثابتة، كل مثيل لفئة لديه نسختها الخاصة من المتغير المتقلب.

Volatile != Static

أحد المفاهيم الخاطئة الشائعة هو ذلك volatile يعني وجود نسخة واحدة من المتغير في كافة سلاسل الرسائل. ومع ذلك، هذا ليس هو الحال. يضمن Volatile فقط أن يتم مسح نسخ ذاكرة التخزين المؤقت لمؤشر الترابط المحلي على الفور بدلاً من احتمال انتظار التحديثات من سلاسل الرسائل الأخرى.

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

لماذا تستخدم المتطايرة؟

بينما يمكن أن تكون المتغيرات الثابتة مفيدة لمشاركة البيانات بين جميع سلاسل الرسائل في فئة، فإنها يمكن أن تكون مشكلة في سيناريوهات متعددة مؤشرات الترابط. بدون المزامنة المناسبة، يمكن أن يؤدي وصول عدة سلاسل رسائل إلى قيمة ثابتة إلى تلف البيانات.

توفر المتغيرات المتغيرة طريقة لتجنب مشكلات التزامن هذه. من خلال الإعلان عن متغير كمتغير، فإننا نجبر سلاسل الرسائل على قراءة القيمة العالمية دائمًا وعدم الاعتماد على القيم المخزنة مؤقتًا.

متى يتم استخدام Static vs Volatile

  • استخدم static عندما تحتاج إلى قيمة مشتركة واحدة عبر جميع مثيلات الفصل الدراسي.
  • استخدم volatile عندما تحتاج إلى قيمة واحدة مرئية عبر سلاسل الرسائل والتي نضمن وجودها تم التحديث بدون تخزين مؤقت.
  • استخدم static volatile عندما تريد مشاركة قيمة عبر جميع سلاسل الرسائل وتجنب التخزين المؤقت المحلي للقيم.

تنبيه: المتقلبة ليست بديلاً للمزامنة

في حين أن المتقلبة تضمن الرؤية، إلا أنها لا تضمن الذرية أو العمليات الآمنة للخيط. بالنسبة للمهام التي تتطلب عمليات متزامنة، يجب عليك استخدام أوليات المزامنة المناسبة مثل الأقفال أو فئة AtomicInteger.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3