当前位置:   article > 正文

读写锁 ReadWriteLock的使用_reentrantreadwritelock在读的时候不能写吗

reentrantreadwritelock在读的时候不能写吗
ReadWriteLock是一个接口,只有一个实现类ReentrantReadWriteLock 
读写锁:读的时候可以多线程同时读,写的时候只能有一个线程单独写,读的时候不允许写
读锁readLock即共享锁
写锁writeLock即独占锁
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
使用举例:

public class ReadWriteLockTest {
    public static void main(String[] args) {
        Data data = new Data();
        // 多线程同时写
        for (int i = 1;i <= 5;i++){
            new Thread(()->{
                data.write();
            },String.valueOf(i)).start();
        }
        // 多线程同时读
        for (int i = 1;i <= 5;i++){
            new Thread(()->{
                data.read();
            },String.valueOf(i)).start();
        }
    }
}
// 资源类
class Data {
    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); //创建读写锁
    // 写:写的时候只能有一个线程单独写
    public void write(){
        readWriteLock.writeLock().lock(); // 写锁加锁
        try {
            System.out.println(Thread.currentThread().getName()+"正在写入");
            TimeUnit.SECONDS.sleep(1); // 延时1秒
            System.out.println(Thread.currentThread().getName()+"写入结束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            readWriteLock.writeLock().unlock(); // 写锁解锁
        }
    }
    // 读:读的时候可以多线程同时读
    public void read(){
       readWriteLock.readLock().lock(); // 读锁加锁
       try {
           System.out.println(Thread.currentThread().getName()+"正在读取");
           TimeUnit.SECONDS.sleep(1); // 延时1秒
           System.out.println(Thread.currentThread().getName()+"读取结束");
       }catch (InterruptedException e) {
           e.printStackTrace();
       }finally {
           readWriteLock.readLock().unlock(); // 读锁解锁
       }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

结果:

2正在写入
2写入结束
1正在写入
1写入结束
4正在写入
4写入结束
3正在写入
3写入结束
5正在写入
5写入结束
1正在读取
2正在读取
3正在读取
4正在读取
5正在读取
1读取结束
2读取结束
5读取结束
4读取结束
3读取结束
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/956210
推荐阅读
相关标签
  

闽ICP备14008679号