美文网首页selector
atomic与线程安全

atomic与线程安全

作者: LamSpeech | 来源:发表于2020-03-23 14:57 被阅读0次

    atomic在日常开发中是个很少使用,也是个很容易出现错误的知识点,那么atomic能够保证线程安全吗?

    答案是不能,至于为什么这么说我们可以从以下几点来看:


    1、什么是线程安全

    多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。

    2、线程安全的三个核心体现

    原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

    可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

    有序性:程序执行的顺序按照代码的先后顺序执行。

    3、举一个最简单的例子

    假设有A/B/C三个线程和一个使用atomic修饰的属性,线程A调了属性的getter方法,与此同时线程B 、线程C都调了属性的setter方法 。                        

    那么最后A得到的值,有3种可能:可能是BC赋值之前的原始值,也可能是B赋值的值,也可能是C赋值的值。                                                                

    同时,最终这个属性的值,可能是B赋值的值,也有可能是C赋值的值。

    最后我们可以得出一个结论,atomic是不能保证属性线程安全的,因为它修饰的属性并不能完全符合线程安全的三个核心体现。

    相关文章

      网友评论

        本文标题:atomic与线程安全

        本文链接:https://www.haomeiwen.com/subject/qhrwyhtx.html