juc的公平锁与非公平锁
时间: 2024-03-14 12:39:02 浏览: 99
JUC中的公平锁和非公平锁都是ReentrantLock类的实现。公平锁和非公平锁的区别在于获取锁的方式不同。
公平锁:线程获取锁的顺序是按照线程加锁的顺序来分配的,即先来先得的原则。当一个线程释放锁时,等待时间最长的线程将获得锁。
非公平锁:线程获取锁的顺序是随机的,不保证等待时间最长的线程能够优先获得锁。当一个线程释放锁时,任何一个等待锁的线程都有机会获得锁。
在实际应用中,如果对于线程获取锁的顺序有严格要求,可以使用公平锁;如果对于线程获取锁的顺序没有严格要求,可以使用非公平锁,因为非公平锁的吞吐量比公平锁高。
相关问题
monitor 锁 和 JUC 锁 的区别
monitor锁和JUC锁(Java Util Concurrent锁)是两种不同的锁机制。
1. monitor锁是Java中的内置锁,也称为synchronized锁。它是基于对象的,每个对象都有一个关联的monitor锁。在使用synchronized关键字时,会自动获取对象的monitor锁。monitor锁是独占锁,即同一时间只能有一个线程持有该锁。当一个线程持有monitor锁时,其他线程必须等待锁的释放才能获取锁。monitor锁是可重入锁,同一个线程可以多次获取同一个锁。
2. JUC锁是Java Util Concurrent库中提供的锁机制,包括ReentrantLock、ReadWriteLock等。与monitor锁不同,JUC锁是基于接口的,可以根据需要选择不同的锁实现。JUC锁提供了更多的功能和灵活性,例如可定时获取锁、可中断获取锁、公平锁等。JUC锁也是可重入锁,同一个线程可以多次获取同一个锁。
区别:
- monitor锁是Java语言级别的锁机制,而JUC锁是基于Java Util Concurrent库的锁机制。
- monitor锁是基于对象的,每个对象都有一个关联的monitor锁;而JUC锁是基于接口的,可以根据需要选择不同的锁实现。
- JUC锁提供了更多的功能和灵活性,例如可定时获取锁、可中断获取锁、公平锁等。
阅读全文