Java多線程並發編程之變數

來源:互聯網
上載者:User

標籤:

編寫安全執行緒需要關心的:
  • 共用的變數

  • 可變的變數

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

    //線程不安全的類

    public class UnsafeCount {

        private int count = 0;    //該變數是共用的

        public void increase() {    //這裡沒有同步機制,多個線程可以同時訪問

            count++;    //該變數是可變的

        }

        public int getCount() {

            return count;

        } 


有4種方式可以修複這個問題:
1.不線上程中共用該狀態變數,可以將變數封裝到方法中(無狀態的對象一定是安全執行緒的);因為方法中變數是每個線程獨佔的,不和其它線程共用。比如:
 

    public int add(int count){

    return ++count;//這裡也可以說無狀態的對象一定是安全執行緒的

    }

2.將狀態變數修改為不可變的變數。
 

    private final  int count = 0;

3.在訪問狀態變數使用同步策略。
 

    public synchronized  void increase() {

    count++;

    }

4.使用原子變數類。
 

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

Java多線程並發編程之變數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.