0Pricing
Java Academy · درس

المزامنة والأقفال

استخدم الكتل المتزامنة synchronized والأقفال الصريحة لتنسيق الوصول إلى الموارد المشتركة.

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

مقدمة

تمنع المزامنة حالات التنافس عند وصول عدة خيوط إلى البيانات المشتركة.

synchronized

تضمن الكلمة المفتاحية synchronized دخول خيط واحد فقط في كل مرة إلى كتلة أو أسلوب.

الشفرة: أسلوب synchronized

يمنع هذا الأسلوب المتزامن حالات التنافس عند زيادة عدّاد.

public class Main {
  private int count = 0;
  public synchronized 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 = " + obj.count);
  }
}

كتلة synchronized

يمكن مزامنة الأقسام الحرجة فقط بدلًا من الأساليب كاملةً، مما يقلّل التزاحم.

الشفرة: كتلة synchronized

تحمي كتلة synchronized سطر الزيادة فقط، وهو القسم الحرج.

public class Main {
  private int count = 0;
  public void add() {
    synchronized(this) {
      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.add(); });
    Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) obj.add(); });
    t1.start(); t2.start();
    t1.join(); t2.join();
    System.out.println("Count = " + obj.count);
  }
}

الشفرة: ReentrantLock

يوفّر ReentrantLock قفلًا صريحًا يتميز بالمرونة، مثل tryLock() وخيارات الإنصاف.

import java.util.concurrent.locks.*;public class Main {
  private int count = 0;
  private Lock lock = new ReentrantLock();
  public void increment() {
    lock.lock();
    try { count++; }
    finally { lock.unlock(); }
  }
  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 = " + obj.count);
  }
}

فحص المزامنة

فحص سريع: ما الغرض من الكلمة المفتاحية synchronized؟

مراجعة

مراجعة: استخدموا synchronized لتحقيق الاستبعاد المتبادل، والكتل للتحكم الدقيق، والأقفال الصريحة للسيناريوهات المتقدمة.

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

هل درس «المزامنة والأقفال» مجاني؟

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

ماذا ستتعلم في «المزامنة والأقفال»؟

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

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

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

كم من الوقت يستغرق درس «المزامنة والأقفال»؟

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

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

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

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

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