لماذا تحتاج الكلمة المفتاحية volatile في Java؟ اشرح مع أمثلة
مرحباً بالجميع! أنا مطور Java مبتدئ، وأدرس مؤخراً تعدد الخيوط بنشاط. صادفت الكلمة المفتاحية `volatile`، لكنني لم أفهم تماماً لماذا هي مطلوبة ومتى يجب استخدامها.
لقد كتبت كوداً صغيراً حيث يقوم خيط واحد بتغيير العلم `running`، بينما يتحقق خيط آخر منه في حلقة. بدون `volatile`، يعمل البرنامج أحياناً بشكل غير صحيح — الخيط الثاني لا يرى التغيير ويستمر في العمل.
إليك كودي:
```java
public class TestVolatile {
private static boolean running = true;
public static void main(String[] args) throws InterruptedException {
Thread worker = new Thread(() -> {
while (running) {
// نفعل شيئاً
}
System.out.println("تم إيقاف Worker");
});
worker.start();
Thread.sleep(1000);
running = false; // نغير العلم في الخيط الرئيسي
System.out.println("تم تعيين العلم إلى false");
}
}
```
المشكلة هي أن البرنامج أحياناً لا ينتهي — worker