今天給大家介紹一下線程同步有哪些方式:
同步方法
給方法加上synchronized關鍵字,同步方法的鎖是this,靜態同步方法的鎖是類名.class
同步代碼塊
由synchronized修飾的代碼塊,同步代碼塊的鎖是任意的對象
使用特殊域變量(volatile)實現線程同步
a.volatile關鍵字為域變量的訪問提供了一種免鎖機制,
b.使用volatile修飾域相當于告訴虛擬機該域可能會被其他線程更新,
c.因此每次使用該域就要重新計算,而不是使用寄存器中的值
d.volatile不會提供任何原子操作,它也不能用來修飾final類型的變量
使用重入鎖實現線程同步
在JavaSE5.0中新增了一個java.util.concurrent包來支持同步。 ReentrantLock類是可重入、互斥、實現了Lock接口的鎖, 它與使用synchronized方法和快具有相同的基本行為和語義,并且擴展了其能力
使用局部變量實現線程同步
如果使用ThreadLocal管理變量,則每一個使用該變量的線程都獲得該變量的副本, 副本之間相互獨立,這樣每一個線程都可以隨意修改自己的變量副本,而不會對其他線程產生影響。