建站网址不安全,怎么利用360域名做网站,如何让各大搜索引擎识别新建网站,Wordpress is文章展示Happens-Before
Happens-Before 是一种可见性模型#xff0c;也就是说#xff0c;在多线程环境下。原本因为指令重排序的存在会导致数据的可见性问题#xff0c;也就是 A 线程修改某个共享变量对 B 线程不可见。因此#xff0c;JMM 通过 Happens-Before 关系向开发人员提供…Happens-Before
Happens-Before 是一种可见性模型也就是说在多线程环境下。原本因为指令重排序的存在会导致数据的可见性问题也就是 A 线程修改某个共享变量对 B 线程不可见。因此JMM 通过 Happens-Before 关系向开发人员提供跨越线程的内存可见性保证。如果一个操作的执行结果对另外一个操作可见那么这两个操作之间必然存在Happens-Before 管理。其次Happens-Before 关系只是描述结果的可见性并不表示指令执行的先后顺序也就是说只要不对结果产生影响仍然允许指令的重排序。
Happens-Before 规则 在 JMM 中存在很多的 Happens-Before 规则 程序顺序规则一个线程中的每个操作 happens-before 这个线程中的任意后续操作可以简单认为是 as-if-serial也就是不管怎么重排序单线程的程序的执行结果不能改变 传递性规则如图也就是 A Happens-Before BB Happens-Before C。就可以推导出 A Happens-Before C。 volatile 变量规则对一个 volatile 修饰的变量的写一定 happens-before 于任意后续对这个 volatile 变量的读操作 监视器锁规则如图一个线程对于一个锁的释放锁操作一定 happens-before 与后续线程对这个锁的加锁操作在这个场景中如果线程 A 获得了锁并且把 x 修改成了 12那么后续的线程获得锁之后得到的 x 的值一定是 12 线程启动规则如图如果线程 A 执行操作 ThreadB.start(),那么线程 A 的ThreadB.start()之前的操作 happens-before 线程 B 中的任意操作。在这样一个场景中t1 线程启动之前对于 x10 的赋值操作t1 线程启动以后读取 x的值一定是 10. join 规则如图如果线程 A 执行操作 ThreadB.join()并成功返回 那么线程 B 中的任意操作 happens-before 于线程 A 从 ThreadB.join()操作成功的返回。