ล็อคเป็นเครื่องมือในการควบคุมหลายเธรดเพื่อเข้าถึงทรัพยากรที่ใช้ร่วมกัน โดยทั่วไปการล็อคจะให้การเยี่ยมชมทรัพยากรที่ใช้ร่วมกันพิเศษ มีเพียงเธรดเดียวที่จะได้รับการล็อคในแต่ละครั้ง อย่างไรก็ตามล็อคบางตัวอาจอนุญาตให้สัมภาษณ์ทรัพยากรที่ใช้ร่วมกันเช่น ReadWriteLock (รักษาล็อคที่เกี่ยวข้องคู่หนึ่งสำหรับการดำเนินการอ่านอย่างเดียวและอื่น ๆ สำหรับการดำเนินการเขียน)
1. ล็อคให้การดำเนินการล็อคแบบไม่มีเงื่อนไขรอบเวลาการดำเนินการล็อคแบบขัดจังหวะวิธีการล็อคและการปลดล็อคทั้งหมดนั้นชัดเจน
ล็อคอินเทอร์เฟซสาธารณะ {void lock (); โหมดบูลีน trylock (การหมดเวลายาว, timeunit unit) พ่น InterruptedException;
2. Reentrantlock ตระหนักถึงอินเตอร์เฟสล็อค
3. รูปแบบเชิงบรรทัดฐานของอินเตอร์เฟสล็อคต้องใช้การปลดปล่อยล็อค unlock () เพื่อปล่อย lock.unlock () ในบล็อกสุดท้าย หากรหัสล็อค -ผู้พิทักษ์ผิดปกติด้านนอกลองบล็อกมันจะไม่ถูกปล่อยออกมา
การใช้การจำลองการล็อคแบบจำลองต่อไปนี้: สมมติว่ามีสองเธรด (เธรด A, B, B) เพื่อเรียกใช้วิธีการพิมพ์ (ชื่อสตริง) เธรด A รับผิดชอบการพิมพ์สตริง 'Zhangsan' และเธรด B รับผิดชอบการพิมพ์ lisi 'สตริง.
1. เมื่อเพิ่มวิธีผ้าสำลี (ชื่อสตริง) เธรด A ยังไม่ถูกดำเนินการและเธรด B เริ่มดำเนินการแล้วชื่อที่พิมพ์จะมีปัญหาต่อไปนี้
2. เมื่อมีการเพิ่มวิธีการพิมพ์ชื่อลงในการล็อควิธีการพิมพ์ (ชื่อสตริง) จะถูกดำเนินการหลังจาก A เสร็จสิ้นหลังจากการดำเนินการเสร็จสมบูรณ์เพื่อให้ได้การยกเว้นร่วมกันหรือเอฟเฟกต์การซิงโครไนซ์ร่วมกัน
com.ljq.test.thread; นำเข้า java.util.concurrent.locks.locks; String [] args) {new Locktest () ) {ลอง {thread.sleep (10);} catch (interruptedexception e) {e.printstacktrace ();} haangsan ");}}}) เริ่มต้น (); // b เธรดใหม่ (ใหม่ runnable () { @Override โมฆะสาธารณะ Run () {ในขณะที่ (จริง) {ลอง {thread.sleep (10);} catch (interruptedException e) {e.prin . start ();} outputer คลาสคง ; i <len;