
并发编程
湟同学你好
爱生活爱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 · 230 阅读 · 0 评论 -
互斥锁,解决原子性问题以及加锁后引发的死锁
互斥锁,解决原子性问题以及加锁后引发的死锁 原子性的问题就是线程切换。在单核时代,同一时刻只有一个线程工作,禁用CPU中断就能禁止线程切换。多核时代,同一时刻可能有多个线程在执行,禁用CPU中断并不能解决原子性问题。经过上述分析得出结论,同一时刻只有一个线程执行是解决原子性问题的必要条件,这个条件称之为互斥,保证共享变量的修改是互斥的,无论是单核还是多核,都可以保证其原子性。 这里增加多一个概念:...原创 2020-05-01 08:18:07 · 528 阅读 · 0 评论 -
用户量都变大了,还不掌握一点解决并发编程三大问题的思路吗
掌握思路之前,需要先了解一个概念: JAVA内存模型:这是一种规范,通过定义多种规则对编译器和处理器进行限制,主要用来解决可见性和有序性问题。 java内存模型所涉及到的关键字:锁、volatile字段、final修饰符与对象的安全发布。ps:内存模型的底层实现:通过内存屏障来禁止重排序。 锁:锁是具备happens-before关系的,在解锁的时候,JVM会把缓存的内容刷新到内存上,保证修改的...原创 2020-04-25 20:43:23 · 299 阅读 · 0 评论 -
并发编程之三个主要问题(可见性,原子性,有序性)
可见性、原子性和有序性问题 CPU、内存和IO设备随着时代发也在不断更新迭代,不过更新迭代的同时,他们之间的矛盾也一直存在,三者存在巨大的速度差异(CPU>内存>IO)。 操作系统的整体性能就取决于它的·短板:IO读写,为此为了平衡他们之间的速度差异,操作系统和计算机体系也提供了许多对策来平衡他们之间的速度: 1、增加CPU缓存,平衡CPU和内存的速度差异。 2、操作系统增加了进程和线...原创 2020-04-18 12:03:51 · 267 阅读 · 0 评论