线程安全-有序性 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 547 字 | 阅读时长 ≈ 2 分钟 问题导出 Java内存模型中,允许编译器和翻译器对指令进行重排序,但是重排序的过程不会影响到单线程程序的运行,却会影响到多线程并发执行的正确性。 Java中的volatile通过内存屏障也可以一定程度上禁止指令的重排序。 synchronized和Lock机制都是通过线程阻塞对于主内存来讲其同一时刻只有一个线程可以访问操作,保证了有序性。 Java内存模型实际存在先天的有序性:不需要通过任何手段即可保证一定的有序性,即happens-before原则。 阅读全文 »
线程安全-可见性 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 758 字 | 阅读时长 ≈ 3 分钟 概述指一个线程对主内存的修改,可以及时地被其他线程观察到。 导致共享变量在线程间不可见的原因有: 多线程交叉进行。 重排序结合多线程运行。 共享变量更新后的值未及时进行工作内存与主内存的更新。 阅读全文 »
内在锁Synchronized关键字 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 472 字 | 阅读时长 ≈ 2 分钟 概述Java 语言中主要的同步手段就是 synchronized 关键字,它强制实行互斥,确保执行 synchronized 块的线程的动作,能够被后来执行受相同锁保护的 synchronized 块的其他线程看到。 阅读全文 »
AtomicStampReference:CAS中的ABA问题 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 756 字 | 阅读时长 ≈ 3 分钟 问题分析 CAS算法实现一个重要前提:需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化。 阅读全文 »
线程安全之原子性--Atomic包-Part-3 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 542 字 | 阅读时长 ≈ 3 分钟 AtomicReference与AtomicReferenceFiledUpdater比较分析 阅读全文 »