將會導致數據不準確,相互之間產生沖突,因此加入同步鎖以避免在該線程沒有完成操作之前,被其他線程的調用, 從而保證了該變量的唯壹性和準確性。
二、實現方法:
1、同步方法
即有synchronized關鍵字修飾的方法。
由於java的每個對象都有壹個內置鎖,當用此關鍵字修飾方法時,內置鎖會保護整個方法。在調用該方法前,需要獲得內置鎖,否則就處於阻塞狀態。
代碼如: public synchronized void save(){}123
註: synchronized關鍵字也可以修飾靜態方法,此時如果調用該靜態方法,將會鎖住整個類
2、同步代碼塊
即有synchronized關鍵字修飾的語句塊。被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步。
3、使用特殊域變量(volatile)實現線程同步
1)volatile關鍵字為域變量的訪問提供了壹種免鎖機制;
2)使用volatile修飾域相當於告訴虛擬機該域可能會被其他線程更新,
3)因此每次使用該域就要重新計算,而不是使用寄存器中的值
4)volatile不會提供任何原子操作,它也不能用來修飾final類型的變量
4、使用重入鎖實現線程同步
在JavaSE5.0中新增了壹個java.util.concurrent包來支持同步。
ReentrantLock類是可重入、互斥、實現了Lock接口的鎖,它與使用synchronized方法和快具有相同的基本行為和語義,並且擴展了其能力
5、使用局部變量實現線程同步
如果使用ThreadLocal管理變量,則每壹個使用該變量的線程都獲得該變量的副本,副本之間相互獨立,這樣每壹個線程都可以隨意修改自己的變量副本,而不會對其他線程產生影響。