知识大全 JAVA高级:多核线程-volatile原理与技巧[2]

Posted

篇首语:没有拆不散的夫妻,只有不努力的小三。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JAVA高级:多核线程-volatile原理与技巧[2]相关的知识,希望对你有一定的参考价值。

JAVA高级:多核线程-volatile原理与技巧[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    原因

    这里的increase方法 执行的操作是i++ 即 i = i + ;

    针对i = i + 在多线程中的运算 本身需要改变i的值

    如果 在i已从内存中取到最新值 但未与 进行运算 此时其他线程已数次将运算结果赋值给i

    则当前线程结束时 之前的数次运算结果都将被覆蓋

    即 执行 次increase 可能结果是 <

    一般来说 这种情况需要较高的压力与并发情况下 才会出现

    如何避免这种情况?

    解决以上问题的方法

    一种是操作时 加上同步

    这种方法 无疑将大大降低程序性能 且违背了volatile的初衷

    第二种方式是 使用硬件原语(CAS) 实现非阻塞算法

    从CPU原语上 支持变量级别的低开销同步

    CPU原语 比较并交换(CompareAndSet) 实现非阻塞算法

    什么是CAS?

    cas是现代CPU提供给并发程序使用的原语操作 不同的CPU有不同的使用规范

    在 Intel 处理器中 比较并交换通过指令的 cmpxchg 系列实现

    PowerPC 处理器有一对名为 加载并保留 和 条件存储 的指令 它们实现相同的目地

    MIPS 与 PowerPC 处理器相似 除了第一个指令称为 加载链接

    CAS 操作包含三个操作数 内存位置(V) 预期原值(A)和新值(B)

    什么是非阻塞算法?

    一个线程的失败或挂起不应该影响其他线程的失败或挂起 这类算法称之为非阻塞(nonblocking)算法

    对比阻塞算法

    如果有一类并发操作 其中一个线程优先得到对象监视器的锁 当其他线程到达同步边界时 就会被阻塞

    直到前一个线程释放掉锁后 才可以继续竞争对象锁 (当然 这里的竞争也可是公平的 按先来后到的次序)

cha138/Article/program/Java/gj/201311/27718

相关参考

知识大全 JAVA高级:多核线程-volatile原理与技巧[4]

JAVA高级:多核线程-volatile原理与技巧[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 JAVA高级:多核线程-volatile原理与技巧[3]

JAVA高级:多核线程-volatile原理与技巧[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 多核线程-volatile原理与技巧

  为什么使用volatile比同步代价更低?  同步的代价主要由其覆蓋范围决定如果可以降低同步的覆蓋范围则可以大幅提升程序性能  而volatile的覆蓋范围仅仅变量级别的因此它的同步代价很低  v

知识大全 Java 理论与实践: 正确使用 volatile 变量 线程同步

Java理论与实践:正确使用volatile变量线程同步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 java的volatile与多线程

  Java语言规范中指出为了获得最佳速度允许线程保存共享成员变量的私有拷贝而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比  Volatile修饰的成员变量在每次被线程访问时都强迫从

知识大全 Java多线程之volatile深入分析

Java多线程之volatile深入分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  vola

知识大全 java多线程的volatile关键字

  以前一直没在意一直以为volatile修饰了就高枕无忧了但其实不然最简单的一个场景  publicclassCounter  publicvolatilestaticintcount=;  pub

知识大全 Java线程的概念与原理

Java线程的概念与原理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一操作系统中线程和进程的

知识大全 高级应用 java多线程设计模式详解之一

  线程的创建和启动    java语言已经内置了多线程支持所有实现Runnable接口的类都可被启动一个新线程新线程会执行该实例的run()方法当run()方法执行完毕后线程就结束了一旦一个线程执行

知识大全 实战Java多线程编程精要之高级支持

实战Java多线程编程精要之高级支持  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  线程组  线