Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง ReentrantLock และซิงโครไนซ์ใน Java


มีสองวิธีในการล็อกทรัพยากรที่ใช้ร่วมกันโดยหลายเธรด หนึ่งคือ Reentrant Lock (หรือ ReadWriteLock ) และอีกอันโดยใช้วิธีการซิงโครไนซ์

มีการจัดคลาส ReentrantLock ในแพ็คเกจ Java concurrency จาก Java 5

มันคือการนำส่วนต่อประสานล็อคมาใช้ และตามเอกสารจาวา การใช้งานส่วนต่อประสานการล็อกนั้นให้การดำเนินการที่ครอบคลุมมากกว่าที่จะได้รับโดยใช้วิธีการซิงโครไนซ์

ซีเนียร์ เลขที่ คีย์ ReentrantLock ซิงโครไนซ์
1
รับ Lock
Reentrant lock class จัดเตรียมวิธี lock() เพื่อรับการล็อคบนทรัพยากรที่ใช้ร่วมกันโดย thread
คุณต้องเขียนคีย์เวิร์ดที่ซิงโครไนซ์เพื่อรับกุญแจ
2
ปลดล็อค
ในการปลดล็อค โปรแกรมเมอร์ต้องเรียก Unlock() method
ทำโดยปริยาย
3
ความสามารถในการขัดจังหวะ
lockInterruptibly() สามารถใช้เพื่อขัดจังหวะ thread
ไม่มีทางที่จะขัดจังหวะเธรดได้
4
ความเป็นธรรม
ตัวสร้างของคลาสนี้มีพารามิเตอร์ความเป็นธรรม หากตั้งค่าเป็น True จะล็อกความโปรดปรานในการให้สิทธิ์การเข้าถึงที่รอนานที่สุด
* เกลียว
การล็อกไม่รับประกันการเข้าถึงคำสั่งใด ๆ
5
ล็อกลำดับการเปิดตัว
ปลดล็อคได้ทุกลำดับ
การล็อกควรถูกปล่อยในลำดับเดียวกับที่ได้มา

ตัวอย่าง ReentrantLock

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //Lock some resource

      }
      catch (InterruptedException e) {
         e.printStackTrace();
      }
      finally {
         lock.unlock();
      }
   }
}

ตัวอย่าง SynchronizedLock

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //Lock some resource
      }
   }
}