美文网首页
线程安全

线程安全

作者: 建瓯 | 来源:发表于2019-04-04 14:43 被阅读0次

    线程不安全

    多个线程间共享可变资源;所有线程执行完之后,可变资源的值不正确,主要是因为java内存模型造成的

    线程安全

    保证多个线程间共享可变资源,所有线程执行完成之后,可变资源的值计算正确

    保证线程安全主要从三个方面可见性,原子性,顺序性

    保证可见性;

    变量改变的时候的其他线程可以看到

    final,volatile,锁

    final 所有线程不能修改,volatile 变量改变之后通知所有线程;释放锁的时同步主内存和所有工作内存

    原子性

    操作一次完成,不让让其他线程中间插入

    加锁,保证操作的互斥性

    使用CAS指令(Unsafe.compareAndSwapInt)

    使用原子数值类型(如AtomicInteger)

    使用原子属性更新器(AtomicReferenceUpdater)

    顺序性

    指令重排序

    指令没有按照代码写的顺序执行;典型的情况,引用先赋值,对象还没有初始化完;多个线程再判断对象不未null时,获取到为被初始化完全的对象

    final,volatile可以禁止重排序

    相关文章

      网友评论

          本文标题:线程安全

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