實例講解Java并發(fā)編程之變量
更新時間:2015年04月13日 10:57:10 投稿:junjie
這篇文章主要介紹了實例講解Java并發(fā)編程之變量,本文講解了編寫線程安全需要關心的共享變量和可變變量,需要的朋友可以參考下
編寫線程安全需要關心的:
1.共享的變量
2.可變的變量
共享意味著多個線程可以同時訪問,可變意味著其值在生命周期可以改變。
例如以下count 變量:
復制代碼 代碼如下:
//線程不安全的類
public class UnsafeCount {
private int count = 0; //該變量是共享的
public void increase() { //這里沒有同步機制,多個線程可以同時訪問
count++; //該變量是可變的
}
public int getCount() {
return count;
}
}
有4種方式可以修復這個問題:
1.不在線程中共享該狀態(tài)變量,可以將變量封裝到方法中(無狀態(tài)的對象一定是線程安全的);因為方法中變量是每個線程獨占的,不和其它線程共享。比如:
復制代碼 代碼如下:
public int add(int count){
return ++count;//這里也可以說無狀態(tài)的對象一定是線程安全的
}
2.將狀態(tài)變量修改為不可變的變量。
復制代碼 代碼如下:
private final int count = 0;
3.在訪問狀態(tài)變量使用同步策略。
復制代碼 代碼如下:
public synchronized void increase() {
count++;
}
4.使用原子變量類。
復制代碼 代碼如下:
private AtomicInteger count;
public void increase() {
count.getAndAdd(1);
}
相關文章
Mybatis 動態(tài)表名+Map參數傳遞+批量操作詳解
這篇文章主要介紹了Mybatis 動態(tài)表名+Map參數傳遞+批量操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12從零搭建SpringBoot+MyBatisPlus快速開發(fā)腳手架
這篇文章主要為大家介紹了從零搭建SpringBoot+MyBatisPlus快速開發(fā)腳手架示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06