สภาพแวดล้อมการทำงานของบทช่วยสอนนี้: ระบบ Windows 7, เวอร์ชัน Java 10, คอมพิวเตอร์ DELL G3
1. วิธีการรับ
lock(), tryLock(), tryLock (เวลานาน, หน่วย TimeUnit) และ lockInterruptively() ล้วนถูกใช้เพื่อรับการล็อค
( 1) วิธีการ lock() เป็นวิธีที่ใช้กันมากที่สุด ซึ่งใช้ในการ รับการล็อค หากเธรดอื่นได้มาจากการล็อค ให้รอสักครู่
( 2) เมธอด tryLock() มีค่าส่งคืน ซึ่งหมายความว่าใช้เพื่อ พยายามรับการล็อค หากการได้มาสำเร็จ จะคืนค่าเป็นจริง หากการได้มานั้นล้มเหลว (นั่นคือ การได้มาการล็อคโดยผู้อื่น) thread) จะส่งคืนค่า false ซึ่งหมายความว่าเมธอดนี้จะส่งคืนทันทีไม่ว่าจะเกิดอะไรขึ้นก็ตาม คุณจะไม่รออยู่ที่นั่นเมื่อคุณไม่สามารถล็อคได้
( 3) เมธอด tryLock (หน่วยเวลานาน) คล้ายกับเมธอด tryLock () แต่ข้อแตกต่างคือเมธอดนี้จะ รอเป็นระยะเวลาหนึ่ง เมื่อไม่สามารถรับการล็อคได้ หากไม่สามารถรับการล็อคได้ ภายในระยะเวลาที่กำหนด จะส่งคืนค่าเท็จ คืนค่าเป็นจริงหากได้รับการล็อคตั้งแต่แรกหรือระหว่างช่วงรอ
( 4) เมธอด lockInterruptually() เป็นแบบพิเศษ เมื่อได้รับการล็อคผ่านเมธอดนี้ หากเธรดกำลังรอเพื่อรับการล็อค เธรดสามารถตอบสนองต่อการขัดจังหวะ นั่นคือ ขัดจังหวะสถานะการรอของเธรด กล่าวคือ เมื่อสองเธรดต้องการได้รับการล็อคผ่าน lock.lockInterruptually() ในเวลาเดียวกัน หากเธรด A ได้รับการล็อคในเวลานี้ และเธรด B กำลังรออยู่เท่านั้น ดังนั้นเมธอด threadB.interrupt() ก็คือ ถูกเรียกบนเธรด B สามารถขัดจังหวะกระบวนการรอของเธรด B ได้
2.ตัวอย่าง
ใช้ trylock เป็นตัวอย่าง
ล็อค ล็อค = ...; ถ้า (lock.tryLock()) { พยายาม{ // กำลังประมวลผลงาน } catch (ข้อยกเว้นเช่น) { }ในที่สุด{ lock.unlock(); //ปล่อยล็อค } }อื่น { //หากไม่สามารถรับล็อคได้ ให้ทำอย่างอื่นโดยตรง}
มีวิธีการมากมายที่จัดเก็บไว้ ใน อินเทอร์เฟซ java เพื่ออำนวยความสะดวกในการโทรโดยตรงเมื่อใช้เธรด ทุกคนคุ้นเคยกับอินเทอร์เฟซการล็อค และเรามีความเข้าใจเบื้องต้นเกี่ยวกับแนวคิดนี้แล้ว ดังนั้นวิธีการรับล็อคจึงต้องยังไม่ชัดเจนมากนัก
ข้างต้นเป็นสี่วิธีในการรับล็อคใน Java หลังจากอ่านบทความแล้วคุณสามารถเพิ่มความจำและความเข้าใจในด้านนี้ หากคุณสนใจวิธีอื่นในการรับล็อค คุณสามารถค้นหารหัสที่เกี่ยวข้องเพื่อฝึกฝนหลังเลิกเรียนได้