![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 62
NewbieQiu
这个作者很懒,什么都没留下…
展开
-
synchronized 重量锁
在很多的情况下,在Java程序运行时,同步块中的代码都是不存在竞争的,不同的线程交替的执行同步块中的代码。这种情况下,用重量级锁是没必要的。当锁为轻量级锁时,另一个线程虽然是自旋,但自旋不会一直持续下去,当自旋一定次数后还没获取到锁,就进入阻塞,该锁膨胀为重量级锁。存储在对象头的mark word中,同时也设置偏向锁的标识为101,如果对象处于无锁状态则修改成功,代表该线程获得了偏向锁。当锁是偏向锁时,被另一线程所访问,偏向锁就好升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,提供性能。原创 2023-12-12 14:49:50 · 981 阅读 · 0 评论 -
深度剖析线程安全性问题与底层(一)
线程安全的三个问题: 原子性 可见性 有序性原子性:不能拆可见性:当一个线程对共享变量进行修改后,其他线程能够立即看到修改后的值有序性: 有重排序问题,单线程下重排序后结果不变,多线程情况下会出现问题。原创 2023-12-11 16:24:39 · 358 阅读 · 0 评论 -
并发编程学前准备
方法1:使用Interrupt(),当一个线程的 interrupt 属性被设置为true后,这次线程执行完后就会停止执行,sleep方法会在抛出异常的同时把线程的Interrupt属性设置为false。添加无用的多余数据填充数据至64字节,使一个数据占一个缓存行(dispute)核心1改了A的数据会导致核心2的数据全部失效,核心2只能重新再读一遍AB。其他线程执行完后,当前线程再执行(先预热,主线程才能烤面包)在java中只需要加volatile关键字即可。原创 2023-12-11 15:29:57 · 324 阅读 · 0 评论