zoukankan      html  css  js  c++  java
  • 并发编程中的读写锁分离锁的使用

    ReentrantReadWriteLock(读写锁)

      读写锁ReentrrantWriteLock, 其核心就是实现读写分离的锁,在高并发访问下,尤其是读多写少的情况下,性能要远高于重入锁。

      之前学synchronized、ReentrantLock时,我们知道,同一时间内,只能有一个线程进行访问被锁定的代码,那么读写锁则不同,其本质是分成两个锁,即读锁、写锁。在读锁下,多个线程可以并发地进行访问,但是在写锁的时候,只能一个一个的顺序访问。

    口诀:读读共享,写写互斥。读写互斥。

    下面看一个demo,看一下读写锁的实现,顺便看一下读读共享,写写互斥。读写互斥的实例:

    先看一下读读共享,把下面的内容注释掉:

    运行看一下结果:

     

    会发现,这两个线程是同时进入的,这就是读读共享;

    写写互斥:

    看一下结果:

    可以看出,在t3线程进入时,锁被t3线程获得了,此时,t4线程只能等待t3线程释放锁,然后才能继续执行。

    读写互斥跟上面的类似:

    结果:

    锁优化的总结:

    1、避免死锁

    2、减小锁的持有时间

    3、减小锁的粒度

    4、锁的分离

    5、尽量使用无锁的操作,如原子操作(Atomic系列类),volatile关键字

  • 相关阅读:
    tomcat解压版环境变量配置
    十天冲刺(第二阶段)
    十天冲刺(第二阶段)
    十天冲刺
    十天冲刺第二阶段()
    十天冲刺(第二阶段)
    十天冲刺(第二阶段)
    十天冲刺(第一阶段)
    十天冲刺(第一阶段)
    十天冲刺(第一阶段)
  • 原文地址:https://www.cnblogs.com/shmilyToHu/p/6496555.html
Copyright © 2011-2022 走看看