- 博客(7)
- 收藏
- 关注
原创 ReentrantLock使用对比Synchronized
简述:这篇文章主要是来了解如何使用ReentrantLock,以及ReentrantLock和Synchronized的对比,基于ReentrantLock的AQS源码的分析在ReentrantLock实现及AQS简析中进行了分析介绍,synchronized实现方式及锁优化 中对synchronized进行了详细的介绍 ReentrantLock是可重入锁,也是独享锁,可重入锁是指:如果当...
2018-06-21 22:38:22 208 3
原创 ReentrantLock实现及AQS简析
简述:reentrantLock是java当中提供的一个锁,他和synchronized关键字有所不同,这篇文章主要是从reentrantLock获取锁,然后释放锁,来分析整个底层源码的实现,并不介绍ReentrantLock的具体使用(基于JDK1.8) ReentrantLock 内部维护了一个Sync类, 这个类的两个有两个实现类,分别是NonfairSync和FairSync ,...
2018-06-20 21:59:47 1131 1
原创 Thread类当中sleep, join ,yield方法
简述:线程类当中提供了一些辅助方法,以便我们在使用线程时,来完成不同的场景下的操作 sleep()方法 sleep 方法有个重载方法,sleep(long), sleep(long,int ) sleep方法是让出CPU执行权,但是并不会释放到当前线程所拥有的锁对象,这个是和wait方法不同的地方。 Thread.yield方法 y...
2018-06-10 22:16:19 392
原创 CAS了解及CAS容易发生的问题
CAS(Compare and Swap)比较和交换,是java在处理并发问题时,使用最多的一种方式,简单说就是,指定一个对象V,给出他的期望值,及需要修改的值,如果期望值等同于内存中的值,那么就把这个对象修改成我们想要改变的值,否则修改失败。CAS使用最佳实践 先看下我们下面的场景:public class Case { public volatile in...
2018-06-10 21:05:33 5831
原创 wait(),notify() 和 notifyAll()使用及原理
简述:在上一篇日志中,分析了synchronized关键字,其底层是对对象加锁,通过锁来限制同一时刻只有一个线程来访问同步块,而wait方法是让当前线程失去对锁的拥有权,让出锁,让其他线程进入,又有monitor监视器是属于对象的,那么wait方法及notify也是数据对象的,他们都是对某一个对象的锁的获取和释放。基于以上,可以看出来对于wait方法是建立在锁之上的,notify/noti...
2018-06-09 15:10:46 5735
原创 synchronized实现方式及锁优化
简述:关于synchronized的具体使用方式,网上已经给出了很多文章,各种不同,主要还是对于锁的对象不同导致,说白了,就是锁一个对象的实例,还是锁一个类,这两个是synchronized在使用时,尤其要关注的。这篇日志主要是记录synchronized其底层实现,以及锁的优化。 synchronized在修饰代码块时,我们编译出来看到就是monitorenter和monito...
2018-06-06 12:39:26 599
原创 Volatile关键字介绍
简述:volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”,可见性的意思是一个线程修改一个共享变量时,另一个线程可以读到这个修改的值,如果volatile使用恰当的话,它比synchronized的使用成本更低,因为它不会引起线程的上下文切换和调度。在了解volatile关键字在java中的使用之前,我们需要先连接几个概念 java内...
2018-06-02 20:30:15 9659 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人