熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

JAVA高級:多核線程-volatile原理與技巧[1]

2013-11-23 19:57:12  來源: Java高級技術 

    為什麼使用volatile比同步代價更低?

    同步的代價主要由其覆蓋范圍決定如果可以降低同步的覆蓋范圍則可以大幅提升程序性能

    而volatile的覆蓋范圍僅僅變量級別的因此它的同步代價很低

    volatile原理是什麼?

    volatile的語義其實是告訴處理器不要將我放入工作內存請直接在主存操作我(工作內存詳見java內存模型)

    因此當多核或多線程在訪問該變量時都將直接操作主存這從本質上做到了變量共享

    volatile的有什麼優勢?

    更大的程序吞吐量

    更少的代碼實現多線程

    程序的伸縮性較好

    比較好理解無需太高的學習成本

    volatile有什麼劣勢?

    容易出問題

    比較難設計

    volatile運算存在髒數據問題

    volatile僅僅能保證變量可見性無法保證原子性

    volatile的race condition示例

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

    多線程執行increase方法時是否能保證它的值會是線性遞增的呢?

    答案是否定的

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27717.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.