Java并发-读锁/写锁

这篇看一下JUC包提供的读写锁(共享锁/独占锁)。

之前我们都知道在一个变量被读或者写数据的时候每次只有一个线程可以执行,那么今天我们来看一下读写锁,读写两不误ReadWriteLock

这里有两个概念:

独占锁:

指该锁一次只能被一个线程所持有。(ReentrantLock和Synchronized都属于独占锁)。

共享锁:

指该锁可被多个线程所持有。

ReentrantReadWriteLock其读锁是共享锁,共写锁是独占锁。

读锁的共享锁可以保证并发读是非常高效的,读写,写读,写写的过程是互斥的。

直接使用ReentrantReadWriteLock写段代码看一下:

阅读更多

Atomic包中原子类的使用,以及内部CAS的实现和原理

上篇文章有说过 多线程环境下 进行变量属性 自增操作时会造成线程不安全的情况,也有说到 volatile **关键字,最后也不能保证线程安全,因为多线程情况下 他不能保证原子性,不能保证写操作过程不可以被插队,最后有提到java.util.current.atomic包中的AtomicInteger**类,那么它是如何实现线程安全的呢?,让我们一探究竟!

image

阅读更多

Volatile关键字介绍及使用

volatile关键字java虚拟机提供的轻量级同步机制

  • 保证可见性

  • 禁止指令重排序

  • 不保证原子性

可见性:

什么叫可见性呢,首先要说一下JAVA虚拟机内存,JAVA虚拟机内存模型规定,所有的变量都放在计算机的主内存当中,

阅读更多