并发编程
Isaac_Gao
这个作者很懒,什么都没留下…
展开
-
Java Lock 锁的特性和使用(ReentrantLock ReentrantReadWriteLock Condition 可重入锁、读写锁 是什么 使用场景 与Synchronized的区别)
Lock入门 跟同步关键字有同样的内存语义。 与Synchronized的比较 对比 与 synchronized 相比,ReentrantLock 更灵活。 他支持阻塞等待/可中断的等待/非阻塞的获取/超时等待 等 阻塞期间不会响应中断 支持更细粒度的可重入锁 代码示例 // ************************** Synchronized ************************** // 1.用于代码块 synchronized (this)...原创 2020-05-27 00:50:10 · 1124 阅读 · 1 评论 -
你真的了解Synchronized吗?深入JVM,图文并茂的理解Synchronized的加锁原理(锁的概念、同步关键字的概念、同步关键字的原理)
提纲 认识锁 锁的概念 悲观锁 概念:假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁。 实例:Synchronized 就是悲观锁 乐观锁 概念:假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改。 实例:CAS机制 自旋锁 概念:不放弃CPU事件,不断使用 CAS 尝试对数据进行更新,直到成功 实例:AtomicInt 使用自旋锁,保证数据的原子性 其实也是一种乐观锁 可重入锁 概念:同一个线程,在拿到一次锁之后,可以继续调用原创 2020-05-26 01:54:37 · 342 阅读 · 0 评论 -
图文并茂,从源码的角度,深入理解线程池原理(总体设计、线程池的生命周期、任务调度、Worker工作线程)
写在前面 线程池是基于「池化」思想锁设计的线程管理和任务调度工具 好处 降低资源消耗:重复利用已创建(池化)的线程,降低线程创建和销毁造成的性能损耗。 如果 创建与销毁消耗的时间 > 任务执行时间,是很低效的。 提高响应速度:任务到达时,无需等待线程创建即可立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致...原创 2020-05-06 23:27:45 · 488 阅读 · 0 评论 -
重新认识线程池-线程池入门(概念、方法定义、Executor 工具类、执行过程)含图示、代码演示
本文侧重于线程池入门,线程池进阶请关注后续文章 主要讲了:什么是线程池、线程池的 API、TreadPoolExecutor、提交任务时发生了什么、代码演示 为什么要用线程池 为了更好的控制线程数量,而且将任务提交和线程维护解耦。 线程是不是越多越好? 线程在 java 中是一个对象,在操作系统是一种资源分类。线程创建、销毁需要时间。如果创建时间+销毁时间 > 执行任务时间...原创 2020-05-06 00:56:17 · 245 阅读 · 0 评论 -
Java多线程之如何正确的中断线程(Interrupt/Stop的使用)含示例代码
概要 操作的原子性 破坏线程安全的停止 Stop 正确的线程停止 Interrupt 手动检测中断状态 操作的原子性 使用 synchronized 关键字,就是为了保证线程安全(操作的原子性) 即,线程内的变量 a/b 应该都自增成功 public class StopThread implements Runnable { private int a = 0;...原创 2020-04-16 22:25:14 · 329 阅读 · 0 评论 -
一张图,彻底理解Java中六种线程状态以及各状态之间的转换(含示例/测试代码)
目录 状态分类 状态转换 Code New > Runnable > Terminated New > Runnable > Timed_Waiting > Terminated New > Blocked > Runnable > Terminated 状态分类 Java. Lang.Thread.State New 尚未启...原创 2020-04-16 00:11:47 · 334 阅读 · 0 评论 -
【Java并发编程与高并发解决方案】CPU多级缓存与缓存一致性(MESI协议)
最近用到了很多多线程的问题,发现对于并发的理论只是还有些欠缺,在学习的时候也会慢慢积累一下文章~希望能跟更多的小伙伴更好的交流~ 目录 概述以及抛出几个问题 为什么需要CPU多级缓存 为啥要需要缓存Cache cache容量有限,命中率低,为啥还要他。 缓存一致性 MESI 开始详细说一下cpu、内存、缓存之间的关系 如果只是读缓存的情况 如果考虑写缓存的情况 一致性...原创 2018-10-30 00:28:18 · 745 阅读 · 0 评论 -
【Java并发编程与高并发解决方案】JAVA内存模型JMM以及乱序执行优化(重排序)
编辑文章 出现线程安全问题,一般是因为主存和工作内存数据不一致以及重排序,那今天就说一下这两个方面。 乱序执行优化 乱序执行优化是多核CPU为了提高效率而做的不符合代码规则的优化。 int a = 1; int b = 1; int c = a + b; 正常我们看到的执行顺序是A-B-C,但是因为CPU的重排序,运行顺序有可能变为B-A-C,这时候结果是不会受到任何影响的。...原创 2018-10-31 22:11:32 · 684 阅读 · 0 评论