
并发编程
湟同学你好
爱生活爱java
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ReentrantLock加锁与解锁源码解析
我们使用ReentrantLock的时候一般是如下用法public class MainActivity { public static void main(String[] args) { ReentrantLock lock = new ReentrantLock(); lock.lock(); try{ //逻辑代码 }finally { lock.unlock();原创 2020-09-18 22:28:09 · 238 阅读 · 0 评论 -
互斥锁,解决原子性问题以及加锁后引发的死锁
互斥锁,解决原子性问题以及加锁后引发的死锁原子性的问题就是线程切换。在单核时代,同一时刻只有一个线程工作,禁用CPU中断就能禁止线程切换。多核时代,同一时刻可能有多个线程在执行,禁用CPU中断并不能解决原子性问题。经过上述分析得出结论,同一时刻只有一个线程执行是解决原子性问题的必要条件,这个条件称之为互斥,保证共享变量的修改是互斥的,无论是单核还是多核,都可以保证其原子性。这里增加多一个概念:...原创 2020-05-01 08:18:07 · 537 阅读 · 0 评论 -
用户量都变大了,还不掌握一点解决并发编程三大问题的思路吗
掌握思路之前,需要先了解一个概念:JAVA内存模型:这是一种规范,通过定义多种规则对编译器和处理器进行限制,主要用来解决可见性和有序性问题。java内存模型所涉及到的关键字:锁、volatile字段、final修饰符与对象的安全发布。ps:内存模型的底层实现:通过内存屏障来禁止重排序。锁:锁是具备happens-before关系的,在解锁的时候,JVM会把缓存的内容刷新到内存上,保证修改的...原创 2020-04-25 20:43:23 · 304 阅读 · 0 评论 -
并发编程之三个主要问题(可见性,原子性,有序性)
可见性、原子性和有序性问题CPU、内存和IO设备随着时代发也在不断更新迭代,不过更新迭代的同时,他们之间的矛盾也一直存在,三者存在巨大的速度差异(CPU>内存>IO)。操作系统的整体性能就取决于它的·短板:IO读写,为此为了平衡他们之间的速度差异,操作系统和计算机体系也提供了许多对策来平衡他们之间的速度:1、增加CPU缓存,平衡CPU和内存的速度差异。2、操作系统增加了进程和线...原创 2020-04-18 12:03:51 · 273 阅读 · 0 评论