国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

實例講解Java并發(fā)編程之變量

2019-11-26 15:13:17
字體:
供稿:網(wǎng)友

編寫線程安全需要關(guān)心的:

1.共享的變量
2.可變的變量

共享意味著多個線程可以同時訪問,可變意味著其值在生命周期可以改變。
例如以下count 變量:

復(fù)制代碼 代碼如下:

//線程不安全的類
public class UnsafeCount {
    private int count = 0;    //該變量是共享的
    public void increase() {    //這里沒有同步機制,多個線程可以同時訪問
        count++;    //該變量是可變的
    }
    public int getCount() {
        return count;
    }
}

有4種方式可以修復(fù)這個問題:

1.不在線程中共享該狀態(tài)變量,可以將變量封裝到方法中(無狀態(tài)的對象一定是線程安全的);因為方法中變量是每個線程獨占的,不和其它線程共享。比如:

復(fù)制代碼 代碼如下:

public int add(int count){
return ++count;//這里也可以說無狀態(tài)的對象一定是線程安全的
}

2.將狀態(tài)變量修改為不可變的變量。
復(fù)制代碼 代碼如下:

private final  int count = 0;

3.在訪問狀態(tài)變量使用同步策略。
復(fù)制代碼 代碼如下:

public synchronized  void increase() {
count++;
}

4.使用原子變量類。
復(fù)制代碼 代碼如下:

 private AtomicInteger count;
 public void increase() {
  count.getAndAdd(1);
 }

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临夏市| 灵寿县| 永德县| 韶关市| 漳平市| 福州市| 霍州市| 延安市| 安西县| 堆龙德庆县| 霍邱县| 法库县| 河北区| 成武县| 辛集市| 枝江市| 抚顺县| 太仆寺旗| 丽江市| 绥棱县| 南昌县| 云阳县| 苗栗市| 土默特左旗| 内黄县| 石城县| 新余市| 霍林郭勒市| 寻甸| 昌黎县| 中卫市| 江永县| 涡阳县| 西乌珠穆沁旗| 房产| 延寿县| 龙游县| 高清| 汾阳市| 石泉县| 湘潭市|