美文网首页
关于Java读写锁的一些理解和疑问

关于Java读写锁的一些理解和疑问

作者: 孙大硕 | 来源:发表于2019-11-07 11:02 被阅读0次

在我们用线程安全的集合时搜用过CopyOnWriteArrayList,其原理是写时复制,也就是说写时操作的并不是原来的元素,而是将原来的元素copy一份,写完再赋值给原来的元素,而且在写的时候会加锁,也就是说同时只有一个线程可以写数据,当读数据的时候其实读的是老数据,读写已经分离了,所以互不影响。
还有一种锁可以实现读写分离,就是读写锁ReadWriteLockReadWriteLock,分别有读锁和写锁,这个锁的特点是读-写互斥,写-写互斥,读-读共享,就是说当当读的时候不能写,当写的时候不能读,可以有多个线程同时读,但是同一时刻只能有一个线程写。

看到这我就有一个问题,为什么要有读锁,读数据不会对数据源产生任何的更改,也不会有线程安全的问题。

有网友说如果读的时候允许写,那同一时刻多个线程读的数据就不同,有些时候要求必须相同,这就需要读写锁了,读的时候不允许写,保证了数据的实时性。

读写锁比较适合写少读多的情况,因为读可以并发。

回到刚开始说的CopyOnWriteArrayList,没有读锁,当某一时刻多个线程正在读数据,但是有一个线程突然写好了数据,将原数据改变了,那就造成同一时刻读的数据可能不一致,所以实时性不强,而且写的时候复制造成了性能很差。所以只适合写少读多的情况。

相关文章

  • 关于Java读写锁的一些理解和疑问

    在我们用线程安全的集合时搜用过CopyOnWriteArrayList,其原理是写时复制,也就是说写时操作的并不是...

  • 锁2

    5、读写锁 相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到...

  • Java 多线程并发读写锁 ReadWriteLock 实现原理

    转自: 搜狐技术产品 作者:汪建 关于读写锁 Java语法层面的synchronized锁和JDK内置可重入锁R...

  • 基于CAS的一些锁(5)- ReadWriteLock

    ReadWriteLock 读写锁。读写锁的概念其实就是共享锁和排他锁,读锁就是共享锁,写锁就是排他锁。 如何理解...

  • ReentrantReadWriteLock源码解析

    ReentrantReadWriteLock编码示例 上面的代码展示读写锁的使用,读写锁的介绍参考Java锁[ht...

  • 4. ReentrantReadWriteLock

    关于读写锁的一些理论在 十一 .Java并发工具 中已经介绍过,读写锁在同一时刻可以允许多个读线程访问,但是在写线...

  • java并发之ReentrantReadWriteLock

    java并发之ReentrantReadWriteLock 知识导读 读写锁内部维护了两个分离的锁,读锁和写锁,两...

  • 关于java 锁的一些理解

    因为本职工作是做 iOS 的,java 项目也只是以前兴趣使然做的,所以理解一直不是很深(毕竟我做的iOS项目本身...

  • java 内存模型 锁的理解

    java 内存模型 锁的理解 Java 1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”...

  • 读写锁的原理

    读写锁的使用 读写锁在 Java 中是 ReentrantReadWriteLock,使用方式是: Reentra...

网友评论

      本文标题:关于Java读写锁的一些理解和疑问

      本文链接:https://www.haomeiwen.com/subject/qyymbctx.html