![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程编程
小白不想当码农
这个作者很懒,什么都没留下…
展开
-
吐血带你分析AQS源码!!!
啥是AQS呢? AQS是一个用来构建锁和同步器的框架,可以帮助我们快速构建锁和同步队列器,ReebtrantLock,CountDownLatch,ReentrantWriteLock等都是基于AQS实现。 AQS底层使用双端队列,CAS操作实现 先来看一下AQS中重要的属性 //双端队列的头节点,是当前共享资源的持有线程,不再阻塞队列之内 private transient volatile Node head; //阻塞队列的尾节点 private transient volatile Node ta原创 2020-08-01 22:03:41 · 134 阅读 · 0 评论 -
并发下的Integer陷阱
自动装箱的陷阱:https://blog.csdn.net/weixin_44799092/article/details/107322013 今天在阅读 《实战java高并发》的时候看到一个案例,特此记录 public class BadLockInteger implements Runnable{ public static Integer i=0; static BadLockInteger instance=new BadLockInteger(); @Override原创 2020-07-19 15:12:04 · 364 阅读 · 0 评论 -
synchronized 加锁
处理器层面 加锁 :刷新处理器缓存 刷新处理器缓存 处理器通过缓存一致化协议,从除自身外的其他处理器的高速缓存中读取数据,并将结果更新到自己的缓存中 锁的释放:冲刷处理器缓存 冲刷处理器缓存 将对变量的修改结果写入缓存或者主存中,而不是在寄存器或者写缓冲器中 JMM 加锁:清空工作内存中该变量的副本,从主内存中读取 锁释放:将变量写回主内存中,并且通知其他线程的工作线程该变量的副本无效 ...原创 2020-06-19 15:28:46 · 191 阅读 · 0 评论 -
wait(),notify()方法详解
使用场景 在单线程下,要实现程序执行某操作必须满足某一条件可以将这个操作放在一格if的语句体中。在多线程下,一个线程执行的某个操作必须满足某个条件,且这个条件不满足只是暂时的,这个条件只是需要另一个线程来改变。在这种情况下,我们可以在条件不满足的时候将线程暂停进入WAIT,当条件满足的时候,再去将线程唤醒。 使用wait()和notify()实现上述场景 someObject.wait()/someObject.wait(long) 每一个对象都有此方法,对象调用此方法会使得对象所在的线程暂停进入WAIT原创 2020-05-23 22:13:18 · 1096 阅读 · 0 评论 -
多线程之内存屏障
内存屏障 线程的同步机制底层实现依靠的就是:内存屏障 我们知道保障可见性依靠 刷新处理器缓存和冲刷处理器缓存。锁的获得释放,volatile关键字都可以保障对共享变量的操作包含这俩个动作 含义: 内存屏障是对一类仅针对读写指令的跨处理架构的比较底层的抽象,它被插到俩个指令之间,来禁止编译器,处理器重排序,其伴随着 冲刷处理器缓存和刷新处理器缓存 分类(处理器层面): load barrier --》读屏障 ,存储屏障 作用:刷新处理器缓存,阻止屏障俩侧的指令重排序 jvm会在申请锁指令之后插入load原创 2020-05-13 12:49:39 · 382 阅读 · 0 评论 -
浅谈线程安全问题的几个方面
线程安全问题的三个方面 原子性 可见性 有序性 导致线程安全问题的原因 多个线程在不加任认为限制的情况下,并非的操作同一个共享变量 原子性 俩个含义: 对共享变量的访问操作在其执行线程之外的其他线程下来看,该操作要么完成,要么没完成。即其他线程不会看到该操作的中间部分 对同一共享变量的俩个原子操作不可以交错进行,一次只能进行一个 java中实现原子性 锁:锁是排他性资源。为共享变量加锁,可以保证共享变量在任意时刻只能被一个线程所访问 CAS: 处理器实现的一种锁机制,它在硬件方面保障原子性 …原创 2020-05-12 10:12:34 · 394 阅读 · 0 评论 -
线程安全之重排序
重排序 一个处理器上面执行的多种操作,在其他处理器看来与该处理器上面程序指定的操作顺序不同 重排序是处理器,编译器,存储子系统为了改善程序执行性能而对内存访问操作执行的操作,它可以在不影响程序(单线程下)正确执行的条件改善程序执行性能 分类: 指令重排序 存储子系统重排序(内存重排序) 一些与重排序相关的概念 源代码顺序:源代码中所指定的内存访问操作 程序顺序:给定处理器中目标代码的执行顺序 执行顺序:处理器中代码的真正执行顺序 感知顺序:给定的处理器感知到的该处理器和其他处理器的内存访问操作 指令原创 2020-05-11 14:23:45 · 494 阅读 · 0 评论