当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

JAVA高级:多核线程-volatile原理与本领[Java编程]

赞助商链接



  本文“JAVA高级:多核线程-volatile原理与本领[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

为什么利用volatile比同步代价更低?

同步的代价, 主要由其覆盖范围决意, 假如可以降低同步的覆盖范围, 则可以大幅晋升程序性能.

而volatile的覆盖范围仅仅变量级别的. 因此它的同步代价很低.

volatile原理是什么?

volatile的语义, 其实是奉告处理器, 不要将我放入工作内存, 请直接在主存操作我.(工作内存详见java内存模子)

因此, 当多核或多线程在拜候该变量时, 都将直接操作主存, 这从本质上, 做到了变量同享.

volatile的有什么上风?

1, 更大的程序吞吐量

2, 更少的代码实现多线程

3, 程序的伸缩性较好

4, 对比好理解, 无需太高的学习本钱

volatile有什么劣势?

1, 简单出问题

2, 对比难计划

volatile运算存在脏数据问题

volatile仅仅能保证变量可见性, 无法保证原子性.

volatile的race condition示例:

public class TestRaceCondition {
private volatile int i = 0;
public void increase() {
i++;
}
public int getValue() {
return i;
}
}

当多线程履行increase办法时, 能否能保证它的值会是线性递增的呢?

答案能否定的.

缘由:

这里的increase办法, 履行的操作是i++, 即 i = i + 1;

针对i = i + 1, 在多线程中的运算, 本身需求改变i的值.

假如, 在i已从内存中取到最新值, 但未与1举行运算, 此时其他线程已数次将运算后果赋值给i.

则当前线程完毕时, 之前的数次运算后果都将被覆盖.

即, 履行100次increase, 大概后果是 < 100.

普通来说, 这种情形需求较高的压力与并发情形下, 才会呈现.


  以上是“JAVA高级:多核线程-volatile原理与本领[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .