
JUC
文章平均质量分 95
克鲁德战士
公众号:克鲁德战士;个人博客:mewbugger.github.io
展开
-
【Java并发编程的艺术3】Java内存模型(下)
根据volatile的happens-before规则,释放锁的线程在写volatile变量之前可见的共享变量,在获取锁的线程读取同一个volatile变量后将立即变得对获取锁的线程可见。对于引用类型,写final域的重排序规则对编译器和处理器增加了如下约束:在构造函数内对一个final引用的对象成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。如上图所示,线程A在写flag变量后,本地内存A中被线程A更新过的两个共享变量的值被刷新到主内存中。原创 2024-11-25 22:24:07 · 963 阅读 · 0 评论 -
【Java并发编程的艺术3】Java内存模型(中)
虽然线程A可能在临界区内做了重排序,但由于监视器互斥执行的特性,这里的线程B根本无法“观察”到线程A在临界区内的重排序,这种重排序既提高了执行效率,又没有改变程序的执行结果。但A和B之间没有数据依赖关系,编译器和处理器可以重排序A和B之间的执行顺序,下图是该程序的两种执行顺序。对于未同步或未正确同步的多线程程序,JMM只提供最小安全性,线程执行时读取到的值,要么是之前某个线程写入的值,要么是默认值(0,Null,False),JMM保证线程读操作读取到的值不会无中生有地冒出来。原创 2024-10-24 01:19:24 · 787 阅读 · 0 评论 -
【Java并发编程的艺术3】Java内存模型(上)
与程序员密切相关的happens-before规则如下;程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任意后续操作。监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。传递性:如果A happens-before B,且B happens-before C,那么A happens-before C。原创 2024-10-05 01:18:09 · 1153 阅读 · 1 评论 -
【Java并发编程的艺术2】Java并发机制的底层实现原理
Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。术语英文单词术语描述内存屏障一组处理器指令,用于实现对内存的顺序限制缓冲行cache lineCPU高速缓存中可以分配的最小存储单位。处理器填写缓存行时会加载整个缓存行,现代CPU需要执行几百次CPU指令原子操作不可中断的一个或一系列操作缓存行填充当处理器识别到从内存中读取操作数是可缓存的,处理器读取整个高速缓存行到适当的缓存(L2,L3,L3的或所有)写命中。原创 2024-09-21 22:00:19 · 1189 阅读 · 0 评论