并发编程
并发编程相关内容,主要参考别人整理的
会coding的厨子
这个作者很懒,什么都没留下…
展开
-
10、详解Condition的await和signal等待通知机制
1.Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来...转载 2019-12-24 11:43:46 · 188 阅读 · 0 评论 -
8、彻底理解ReentrantLock
ReentrantLock的介绍ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性(关于synchronized可以看这篇文章),synchronized通过获取自增,释放自减的方式实现重入。与此同时,Reen...转载 2019-12-24 11:41:15 · 126 阅读 · 0 评论 -
7、(AQS)AbstractQueuedSynchronizer
参考资料:https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html 同步器是用来构建锁和其他同步组件的基础框架,它的实现主要依赖一个int成员变量来表示同步状态以及通过一个FIFO队列构成等待队列。它的子类必须重写AQS的几个protected修饰的用来改变同步状态的方法,其他方法主要是实现了排队和阻塞机制。状态的...原创 2019-12-24 11:40:17 · 124 阅读 · 0 评论 -
6、原子性、可见性和有序性以及原因
1. 三大性质简介synchronized: 具有原子性,有序性和可见性;volatile:具有有序性和可见性在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在原子性...原创 2019-12-24 11:37:41 · 338 阅读 · 0 评论 -
3.、synchronized简介
synchronized简介自我理解:synchronize在JDK1.6之后进行优化升级,新增:偏向锁、轻量级锁和重量锁。性能提升很大。所以现在建议采用synchronize。在学习知识前,我们先来看一个现象:public class SynchronizedDemo implements Runnable {private static int count = 0;...原创 2019-12-24 11:31:15 · 206 阅读 · 1 评论 -
4、volatile
1. volatile简介自我总结:synchronized: 具有原子性,有序性和可见性;volatile:具有有序性和可见性另外的参考资料: https://blog.csdn.net/yinbucheng/article/details/71305951在for()循环或者while()内容中对voilate赋值不生效。for (Node<E> h = h...原创 2019-12-24 11:32:41 · 353 阅读 · 0 评论 -
2、java内存模型以及happens-before规则
1. JMM的介绍自我理解:出现线程安全的原因:一般是因为主内存和工作内存数据不一致性和重排序导致的。在单线程当中:as-if-serial会保证顺序执行和重排序之后的结果是一致的。在多线程的前提下:JMM可以通过happens-before关系向程序员提供跨线程的内存可见性保证,JMM中happens-before原则会提供六种规则,如果A线程的写操作a与B线程的读操作b之间存...原创 2019-12-24 11:30:17 · 153 阅读 · 0 评论 -
1、线程的状态转换以及基本操作
在上一篇文章中并发编程的优缺点谈到了为什么花功夫去学习并发编程的技术,也就是说我们必须了解到并发编程的优缺点,我们在什么情况下可以去考虑开启多个线程去实现我们的业务,当然使用多线程我们应该着重注意一些什么,在上一篇文章中会有一些讨论。那么,说了这么多,无论是针对面试还是实际工作中作为一名软件开发人员都应该具备这样的技能。万事开头难,接下来就应该了解如何新建一个线程?线程状态是怎样转换的?关于线...原创 2019-12-24 11:29:28 · 146 阅读 · 0 评论 -
0、final的具体使用场景
final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,我想对final在多线程中存在的重排序问题也很容易忽略,希望能够一起做下探讨。2. final的具体使用场景final能够修饰变量,方法和类,也就是final使用范围基本涵盖了java每个地方,下面就分别以锁修饰的位置:...转载 2019-12-24 11:23:36 · 400 阅读 · 0 评论