用两个int值实现读写锁

 1 private int readcount = 0;
 2     private int writecount = 0;
 3     
 4     public void lockread() throws InterruptedException{
 5         while(writecount > 0){
 6             synchronized(this){
 7                 wait();
 8             }
 9         }
10         readcount++;
11         //进行读取操作
12         System.out.println("读操作");
13     }
14     
15     public void unlockread(){
16         readcount--;
17         synchronized(this){
18             notifyAll();
19         }
20     }
21     
22     public void lockwrite() throws InterruptedException{
23         while(writecount > 0){
24             synchronized(this){
25                 wait();
26             }
27         }
28         //之所以在这里先++,是先占一个坑,避免读操作太多,从而产生写的饥饿等待
29         writecount++;
30         while(readcount > 0){
31             synchronized(this){
32                 wait();
33             }
34         }
35         //进行写入操作
36         System.out.println("写操作");
37     }
38     
39     public void unlockwrite(){
40         writecount--;
41         synchronized(this){
42             notifyAll();
43         }
44     }

 

  我们假设对写操作的请求比对读操作的请求更重要,就要提升写请求的优先级。

  此外,如果读操作发生的比较频繁,我们又没有提升写操作的优先级,那么就会产生“饥饿”现象。

  请求写操作的线程会一直阻塞,直到所有的读线程都从ReadWriteLock上解锁了。

 

转载于:https://www.cnblogs.com/mengchunchen/p/9848126.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值