
Java并发机制
rick_zyl
这个作者很懒,什么都没留下…
展开
-
JAVA并发-synchronized的底层原理与应用
前言synchronized作为java关键字,在多线程并发编程中一直是一个很重要的角色,java SE 1.6之前其一直被人称为重量级锁,但是1.6对synchronized进行了各种优化,有些情况下它并没有那么重了。synchronized 应用方式利用synchronized实现同步的基础: java中的每一个对象都可以作为锁,具体表现为以下三种形式。对于普通同步方法,锁住的...原创 2019-08-01 15:23:03 · 145 阅读 · 0 评论 -
JAVA并发-Lock接口与队列同步器AQS
锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。一、Lock接口在Lock接 口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能...原创 2019-08-13 17:09:16 · 187 阅读 · 0 评论 -
JAVA并发-volatile关键字深入解析
Java语言规范对volatile的定义Java语言提供了volatile,在某些情况下比锁更加方便,volatile是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新...原创 2019-08-07 16:11:03 · 268 阅读 · 0 评论 -
JAVA并发-重入锁ReentrantLock
一、ReentrantLock重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对 资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。synchronized关键字隐式的支持重进入,比如一个synchronized修饰的递归方法,在方法执行时,执行线程在获取了锁之后仍能连续多次地获得该锁。ReentrantLock虽然没能像sync...原创 2019-08-14 15:07:36 · 181 阅读 · 0 评论 -
JAVA并发-Condition接口
任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、 wait(long timeout)、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,可以实现等待/通知模式。Condition接口Condition接口提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但...原创 2019-08-19 18:06:36 · 142 阅读 · 0 评论 -
JAVA并发-读写锁
读写锁不同于互斥锁和重入锁,读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。读写锁在实现多线程同时读,写线程阻塞所有其它读写线程的功能时,只需要在读操作时获取读锁,写操作时获取写锁即可。一般情况下,读写锁的性能都会比排它锁好,因为大多数场景读是多于...原创 2019-08-15 18:16:36 · 904 阅读 · 0 评论 -
JAVA并发-Java内存模型角度分析双重检验锁(Double Check Lock)
单例模式中的懒汉模式大家都很熟悉,我们看一下下面的代码是否有问题:public class Singleton { private static Singleton singleton; private Singleton(){ } public static Singleton getInstance(){ if(singleton == nul...原创 2019-08-12 16:48:46 · 223 阅读 · 0 评论