0Pricing
Java Academy · บทเรียน

การประสานงานและล็อก

ใช้บล็อก synchronized และล็อกแบบชัดเจนเพื่อประสานการเข้าถึงทรัพยากรร่วมกัน

การประสานงานและล็อก เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน

บทนำ

การประสานการทำงานช่วยหลีกเลี่ยงสภาวะแข่งขันเมื่อมีหลายเธรดเข้าถึงข้อมูลที่ใช้ร่วมกัน

synchronized

คีย์เวิร์ด 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 เพื่อไม่ให้หลายเธรดทำงานในส่วนเดียวกัน ใช้บล็อกเพื่อควบคุมอย่างละเอียด และใช้การล็อกแบบระบุได้ชัดเจนสำหรับกรณีขั้นสูง

คำถามที่พบบ่อย

บทเรียน “การประสานงานและล็อก” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การประสานงานและล็อก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การประสานงานและล็อก”

ใช้บล็อก synchronized และล็อกแบบชัดเจนเพื่อประสานการเข้าถึงทรัพยากรร่วมกัน คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน

บทเรียน “การประสานงานและล็อก” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การประสานงานและล็อก
  2. ตัวแปรอะตอมิกและคอลเลกชันแบบทำงานพร้อมกัน
  3. ข้อบกพร่องในการทำงานพร้อมกันที่พบบ่อย
← กลับไปที่ Java Academy