บทความนี้แนะนำสองกุญแจสำหรับการใช้งานมัลติเธรดของปัญหาการจำหน่ายตั๋วหลายหน้าต่าง ได้แก่ ซิงโครไนซ์ล็อค () และปลดล็อค ()
รหัสเฉพาะมีดังนี้:
ประเภทแรก:
แพ็คเกจทำงานได้; นำเข้า java.util.concurrent.locks.lock; นำเข้า java.util.concurrent.locks.reentrantlock; / * * การซิงโครไนซ์ * มีสองวิธีในการล็อค * ที่นี่: * 1.Synchronized * 2.lock () และปลดล็อค () */ คลาสสาธารณะ myrunnable onprennable runnable {ตั๋ว INT ส่วนตัว = 100; // กำหนดล็อคล็อคส่วนตัวล็อค = ใหม่ reentrantlock (); โมฆะสาธารณะเรียกใช้ () {ในขณะที่ (จริง) {// lock lock.lock (); if (ตั๋ว> 0) {ลอง {thread.sleep (100); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } system.out.println (thread.currentthread (). getName () + "ขาย" + (ตั๋ว-) + "ตั๋ว"); } lock.unlock (); -ผลลัพธ์:
ประเภทที่สอง:
แพ็คเกจทำงานได้; / * * ซิงโครไนซ์ * มีสองวิธีในการล็อค * ที่นี่: * 1.Synchronized * 2.lock () และปลดล็อค () */ คลาสสาธารณะ myrunnable onprennable runnable {ตั๋ว INT ส่วนตัว = 100; โมฆะสาธารณะเรียกใช้ () {ในขณะที่ (จริง) {ซิงโครไนซ์ (นี่) {ถ้า (ตั๋ว> 0) {ลอง {thread.sleep (100); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } system.out.println (thread.currentthread (). getName () + "ขาย" + (ตั๋ว-) + "ตั๋ว"); -ผลลัพธ์:
แพ็คเกจทำงานได้; คลาสสาธารณะ runnabledemo {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {myrunnable myrunnable = new myrunnable (); เธรด t1 = เธรดใหม่ (myrunnable, "window one"); เธรด t2 = เธรดใหม่ (myrunnable, "หน้าต่างสอง"); เธรด t3 = เธรดใหม่ (myrunnable, "หน้าต่างสาม"); t1.start (); t2.start (); t3.start (); -ฉันไม่รู้ว่ามันเป็นเรื่องบังเอิญหรืออะไรบางอย่าง แต่เมื่อฉันใช้อินสแตนซ์ขนาดเล็กหลายเธรดสองตัวนี้คอมพิวเตอร์ก็ติดอยู่และฉันก็ปิดคราสอย่างรวดเร็ว
มีข้อความเกี่ยวกับการสิ้นสุดกระบวนการและยังไม่ได้เพิ่มโปรดดูด้วยตัวคุณเอง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับตัวอย่างปัญหาการจองตั๋วแบบมัลติเธรด Java ฉันหวังว่ามันจะเป็นประโยชน์ต่อการปราบปราม หากคุณมีคำถามใด ๆ โปรดฝากข้อความไว้ตลอดเวลาและหวังว่าจะได้รับความคิดเห็นที่มีค่าของคุณ