java 写优先锁_Lock读写锁的优先度比较
使用兩個線程競爭讀鎖,一個線程競爭寫鎖。看讀寫鎖的獲取率。
代碼如下
public class ThreadDuXieSuo {
public static ReadWriteLocklock =new ReentrantReadWriteLock();
public static LockreadLock =lock.readLock();
public static LockwriteLock =lock.writeLock();
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(3);
service.execute(new Task(readLock,"讀鎖"));
service.execute(new Task(readLock,"讀鎖"));
service.execute(new Task(writeLock,"寫鎖"));
}
}
class Taskimplements Runnable {
private Locklock;
private Stringparam;
public Task(Lock lock, String param) {
this.lock = lock;
this.param = param;
}
@Override
public void run() {
while (true) {
try {
lock.lock();
System.out.println(Thread.currentThread().getId() +"獲得了" +param);
Thread.sleep(1000);
}catch (Exception e) {
System.out.println(Thread.currentThread().getId()+"線程被中斷");
}finally {
System.out.println(Thread.currentThread().getId() +"釋放了" +param);
lock.unlock();
}
}
}
}
運行結果
運行結果
讀寫鎖競爭時,寫鎖的優先級高。如果有這種頻繁競爭的情況可能會出現讀鎖一直處于等待狀態。
解決方案
可以考慮使用公平鎖,不過公平鎖吞吐量沒有非公平鎖高。
new ReentrantReadWriteLock(true);返回一個公平鎖。
總結
以上是生活随笔為你收集整理的java 写优先锁_Lock读写锁的优先度比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java dto是什么_java项目中V
- 下一篇: java静态方法 问题_Java中堆、栈