ข้อบกพร่องในการทำงานพร้อมกันที่พบบ่อย
ระบุข้อบกพร่องที่พบบ่อยในการทำงานพร้อมกัน ได้แก่ ภาวะแข่งขัน ภาวะติดตาย และปัญหาการมองเห็นข้อมูล
ข้อบกพร่องในการทำงานพร้อมกันที่พบบ่อย เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 ช่วยหลีกเลี่ยงปัญหาเหล่านี้
คำถามที่พบบ่อย
บทเรียน “ข้อบกพร่องในการทำงานพร้อมกันที่พบบ่อย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ข้อบกพร่องในการทำงานพร้อมกันที่พบบ่อย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ข้อบกพร่องในการทำงานพร้อมกันที่พบบ่อย”
ระบุข้อบกพร่องที่พบบ่อยในการทำงานพร้อมกัน ได้แก่ ภาวะแข่งขัน ภาวะติดตาย และปัญหาการมองเห็นข้อมูล คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “ข้อบกพร่องในการทำงานพร้อมกันที่พบบ่อย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การประสานงานและล็อก
- ตัวแปรอะตอมิกและคอลเลกชันแบบทำงานพร้อมกัน
- ข้อบกพร่องในการทำงานพร้อมกันที่พบบ่อย