نحن نعلم أن عمليات تحديد القيم المتغيرة في Java هي عمليات ذرية باستثناء المتغيرات الطويلة والمزدوجة، بمعنى آخر، ليست هناك حاجة لمزامنة عمليات القراءة والكتابة البسيطة للقيم المتغيرة.
قبل JVM 1.2، كان تطبيق نموذج الذاكرة في Java يقرأ دائمًا المتغيرات من الذاكرة الرئيسية، والتي لم تكن تتطلب اهتمامًا خاصًا. مع نضج JVM وتحسينه، أصبح استخدام الكلمات الرئيسية المتقلبة مهمًا جدًا في البيئات متعددة الخيوط. في ظل نموذج ذاكرة Java الحالي، يمكن للخيوط تخزين المتغيرات في الذاكرة المحلية (مثل سجلات الآلة) بدلاً من القراءة والكتابة مباشرة في الذاكرة الرئيسية. قد يتسبب هذا في قيام مؤشر ترابط واحد بتعديل قيمة متغير في الذاكرة الرئيسية، بينما يستمر مؤشر ترابط آخر في استخدام نسخته من قيمة المتغير في السجل، مما يتسبب في عدم تناسق البيانات. لحل هذه المشكلة، ما عليك سوى إعلان المتغير على أنه متطاير (غير مستقر) كما هو الحال في هذا البرنامج، وهذا يشير إلى JVM أن هذا المتغير غير مستقر وسيتم تخزينه في الذاكرة الرئيسية في كل مرة يتم استخدامه للقراءة. بشكل عام
لذلك، في بيئة متعددة المهام، يجب تعديل العلامات المشتركة بين المهام باستخدام المتغيرة.
في كل مرة يتم فيها الوصول إلى متغير عضو تم تعديله بواسطة Volatile بواسطة مؤشر ترابط، يتم فرض إعادة قراءة قيمة متغير العضو من الذاكرة المشتركة. علاوة على ذلك، عندما يتغير متغير عضو، يضطر الخيط إلى كتابة القيمة المتغيرة مرة أخرى إلى الذاكرة المشتركة. بهذه الطريقة، في أي وقت، يرى خيطان مختلفان دائمًا نفس قيمة متغير العضو.
تنص مواصفات لغة Java على ما يلي: للحصول على السرعة المثلى، يُسمح للسلاسل بحفظ نسخ خاصة من متغيرات الأعضاء المشتركة ومقارنتها بالقيم الأصلية لمتغيرات الأعضاء المشتركة فقط عندما يدخل مؤشر الترابط إلى كتلة تعليمات برمجية متزامنة أو يتركها.
بهذه الطريقة، عندما تتفاعل عدة سلاسل رسائل مع كائن ما في نفس الوقت، يجب الانتباه إلى السماح للسلاسل بالحصول على تغييرات في متغيرات الأعضاء المشتركة في الوقت المناسب.
تطالب الكلمة الأساسية المتقلبة VM: لا يمكنها حفظ نسخة خاصة من متغير العضو هذا، ولكن يجب أن تتفاعل مباشرة مع متغير العضو المشترك.
اقتراح الاستخدام: استخدم متغيرات الأعضاء التي يتم الوصول إليها بواسطة خيطين أو أكثر. ليس من الضروري استخدامه عندما يكون المتغير المطلوب الوصول إليه موجودًا بالفعل في كتلة تعليمات برمجية متزامنة أو يكون ثابتًا.
نظرًا لأن استخدام الكتل المتطايرة يؤدي إلى تحسين التعليمات البرمجية الضرورية في الجهاز الافتراضي، فهو أقل كفاءة، لذلك يجب استخدام هذه الكلمة الأساسية فقط عند الضرورة.
في تنفيذ الجهاز الظاهري، الأنواع الأساسية مثل int وchar يبلغ طولها كلمة واحدة. والطويل والمزدوج يشغلان كلمتين في الطول. في بعض تطبيقات الآلة الافتراضية، قد يتم التعامل مع طولي الكلمتين على أنهما طولين ذريين لكلمة مفردة.
إذا لم يتم تعديل الطويل والمزدوج باستخدام المتطايرة، وإذا وصلت عدة سلاسل رسائل إلى المتغير، فستكون النتيجة مربكة بسبب عدم ذرية العملية الطويلة بشكل عام.
على سبيل المثال: int، يكتب أحد الخيوط 4، ويكتب آخر 5. يجب أن تكون القيمة النهائية 4 أو 5. وقد يكون النوع الطويل قيمة فوضوية.