趣文网 > 作文大全

面试官为什么总是问happens

2020-11-19 02:05:01
相关推荐

本篇文章从happens-before定义、用途以及具体规则三个方面对happens-before进行解读,并通过源码案例深入了解为什么需要happens-before规则和什么是指令重排序。

什么是happens-before

happens-before:A happens-before B就是A先行发生于B(这种说法不是很准确),定义为hb(A, B)。在Java内存模型中,happens-before的意思是前一个操作的结果可以被后续操作获取。

为什么需要happens-before

JVM会对代码进行编译优化,会出现指令重排序情况,为了避免编译优化对并发编程安全性的影响,需要happens-before规则定义一些禁止编译优化的场景,保证并发编程的正确性。以双重检查单例示例进行分析:

上述代码中instance = new LazyDoubleCheckSingleton()并不是原子操作 ,JVM会分解成以下几个命令执行:

给对象分配内容初始化对象将初始化对象和内存地址建立关联按照上面的分解顺序(1->2->3)执行不存在任何问题,但是由于JVM编译优化的存在,可能导致2和3步骤颠倒,即按1->3->2顺序执行(这就是指令重排序)。按照1->3->2顺序执行,在多线程环境中执行getInstance就有可能出现instance已经和初始对象内存建立关联,但是对象还没有初始化完成的情况,即执行if (instance == null)的时候instance != null 直接返回没有初始化完成的instance,导致再使用instance实例的时候报错。volatile关键字是可以解决指令重排序问题的一种方式,具体解决方式如下:

有哪些happens-before规则

程序次序规则:在一个线程内一段代码的执行结果是有序的。就是还会指令重排,但是随便它怎么排,结果是按照我们代码的顺序生成的不会变。管程锁定规则:就是无论是在单线程环境还是多线程环境,对于同一个锁来说,一个线程对这个锁解锁之后,另一个线程获取了这个锁都能看到前一个线程的操作结果!(管程是一种通用的同步原语,synchronized就是管程的实现)volatile变量规则:就是如果一个线程先去写一个volatile变量,然后一个线程去读这个变量,那么这个写操作的结果一定对读的这个线程可见。线程启动规则:在主线程A执行过程中,启动子线程B,那么线程A在启动子线程B之前对共享变量的修改结果对线程B可见。线程终止规则:在主线程A执行过程中,子线程B终止,那么线程B在终止之前对共享变量的修改结果在线程A中可见。也称线程join()规则。线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程代码检测到中断事件的发生,可以通过Thread.interrupted()检测到是否发生中断。传递性规则:这个简单的,就是happens-before原则具有传递性,即hb(A, B) , hb(B, C),那么hb(A, C)。对象终结规则:这个也简单的,就是一个对象的初始化的完成,也就是构造函数执行的结束一定 happens-before它的finalize()方法。END

笔者是一位热爱互联网、热爱互联网技术、热于分享的年轻人,如果您跟我一样,我愿意成为您的朋友,分享每一个有价值的知识给您。喜欢作者的同学,点赞+转发+关注哦!

阅读剩余内容
网友评论
显示评论内容(3) 收起评论内容
  1. 2022-06-06 07:05忆洛阳[国外网友]IP:3407448674
    @** 峰也许是想了解我们在压力下的表现和应对方式。
    顶8踩0
  2. 2021-08-13 14:32** 峰[安徽省网友]IP:1730976873
    或许是想考察我们对于意外事件的应对和解决能力。
    顶32踩0
  3. 2020-10-20 21:59如大海般奔放[福建省网友]IP:3406596409
    可能是因为面试官想了解我们在面对不确定情况时的处理能力。
    顶8踩0
相关内容
延伸阅读
小编推荐

大家都在看

我们是一家人作文 写一篇三百字的作文 我的端午节400字作文 克服困难英语作文 流鼻血作文500字 关于母爱的小标题作文 静候花开作文 作文800字大全 假如我变成了作文400字 环境的重要性作文 拨动我的心弦作文 生活启示作文 观察狗的作文 珍惜时间的作文题目 关于唠叨的作文 审视自我作文 感恩母亲节作文 三年级秋季作文 意想不到的收获作文 图文并茂的作文 我的故乡300字作文 我的作文集封面图片 窗外高中作文 原来这么简单作文600字 风波作文800字作文 高考全国卷英语作文 介绍乌镇的作文 以自由为题的作文 老师迟到了作文 我的母亲作文400字初二