加入收藏 | 设为首页 | 会员中心 | 我要投稿 宿州站长网 (https://www.0557zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

硬件内存模型到 Java 内存模型,这些硬核知识你知多少?

发布时间:2019-11-09 04:37:21 所属栏目:建站 来源:平头哥
导读:副标题#e# Java 内存模型跟上一篇 JVM 内存结构很像,我经常会把他们搞混,但其实它们不是一回事,而且相差还很大的,希望你没它们搞混,特别是在面试的时候,搞混了的话就会答非所问,影响你的面试成绩,当然也许你碰到了半吊子面试官,那就要恭喜你了。Ja

这条规则是指主线程 A 启动子线程 B 后,子线程 B 能够看到主线程在启动子线程 B 前的操作。

  1. public class Demo { 
  2.     private static int count = 0; 
  3.     public static void main(String[] args) throws InterruptedException { 
  4.         Thread t1 = new Thread(() -> { 
  5.             System.out.println(count); 
  6.         }); 
  7.         count = 12; 
  8.         t1.start(); 
  9.     } 

子线程 t1 能够看见主线程对 count 变量的修改,所以在线程中打印出来的是 12 。这也就是线程启动规则

5、线程结束规则

这条是关于线程等待的。它是指主线程 A 等待子线程 B 完成(主线程 A 通过调用子线程 B 的 join() 方法实现),当子线程 B 完成后(主线程 A 中 join() 方法返回),主线程能够看到子线程的操作。当然所谓的“看到”,指的是对共享变量的操作。

  1. public class Demo { 
  2.     private static int count = 0; 
  3.     public static void main(String[] args) throws InterruptedException { 
  4.         Thread t1 = new Thread(() -> { 
  5.             // t1 线程修改了变量 
  6.             count = 12; 
  7.         }); 
  8.         t1.start(); 
  9.         t1.join(); 
  10.         // mian 线程可以看到 t1 线程改修后的变量 
  11.         System.out.println(count); 
  12.     } 

6、中断规则

(编辑:宿州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!