0Pricing
Java Academy · درس

أخطاء التزامن الشائعة

حدّد أخطاء التزامن الشائعة: حالات السباق، والجمود، ومشكلات الرؤية.

أخطاء التزامن الشائعة درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 3 دروس في المجموع.

مقدمة

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

حالات التنافس

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

الشفرة: حالة تنافس

من دون المزامنة، تتداخل عمليات الزيادة، فتنتج أعدادًا غير صحيحة.

public class Main {
  private int count = 0;
  public void increment() { count++; }
  public static void main(String[] args) throws Exception {
    Main obj = new Main();
    Thread t1 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
    Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
    t1.start(); t2.start();
    t1.join(); t2.join();
    System.out.println("Count (expected 2000) = " + obj.count);
  }
}

الجمود

الجمود: يحتفظ خيطان كلٌّ منهما بقفل وينتظر قفل الخيط الآخر، فيتوقف كلاهما.

الشفرة: الجمود

قد تؤدي هذه الشفرة إلى الجمود؛ إذ ينتظر كل خيط قفل الخيط الآخر إلى أجل غير مسمى.

public class Main {
  private final Object lock1 = new Object();
  private final Object lock2 = new Object();
  public void method1() {
    synchronized(lock1) {
      try { Thread.sleep(50); } catch(Exception e) {}
      synchronized(lock2) { System.out.println("method1"); }
    }
  }
  public void method2() {
    synchronized(lock2) {
      try { Thread.sleep(50); } catch(Exception e) {}
      synchronized(lock1) { System.out.println("method2"); }
    }
  }
  public static void main(String[] args) {
    Main obj = new Main();
    new Thread(obj::method1).start();
    new Thread(obj::method2).start();
  }
}

الشفرة: مشكلة ظهور التحديثات

من دون volatile، قد لا يرى أحد الخيوط تحديثات خيط آخر بسبب التخزين المؤقت.

public class Main {
  private static boolean flag = false;
  public static void main(String[] args) throws Exception {
    Thread writer = new Thread(() -> { flag = true; });
    Thread reader = new Thread(() -> { while(!flag) {} System.out.println("Flag seen true"); });
    writer.start(); reader.start();
    writer.join(); reader.join();
  }
}

فحص أخطاء التزامن

فحص سريع: ما المشكلة التي تحدث عندما ينتظر خيطان أقفال بعضهما إلى الأبد؟

مراجعة

مراجعة: تشمل الأخطاء حالات التنافس والجمود ومشكلات ظهور التحديثات. وتساعد المزامنة وvolatile على تجنبها.

الأسئلة الشائعة

هل درس «أخطاء التزامن الشائعة» مجاني؟

نعم — نص درس «أخطاء التزامن الشائعة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 3 دروس في المجموع.

ماذا ستتعلم في «أخطاء التزامن الشائعة»؟

حدّد أخطاء التزامن الشائعة: حالات السباق، والجمود، ومشكلات الرؤية. تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.

كم من الوقت يستغرق درس «أخطاء التزامن الشائعة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المزامنة والأقفال
  2. المتغيرات الذرّية والمجموعات المتزامنة
  3. أخطاء التزامن الشائعة
← العودة إلى Java Academy