Java中線程同步的方法有以下幾種:
synchronized關鍵字:使用synchronized關鍵字可以實現對代碼塊、方法或對象的同步,確保同一時間只有一個線程可以訪問被同步的代碼塊、方法或對象。
ReentrantLock類:ReentrantLock是Java.util.concurrent包下的一個鎖類,它提供了與synchronized關鍵字類似的功能,但更加靈活。通過使用lock()和unlock()方法,可以在代碼塊中實現同步。
Lock接口的Condition方法:在使用ReentrantLock類時,可以通過Condition對象實現線程間的通信和同步。通過調用await()方法使線程進入等待狀態,調用signal()方法喚醒等待狀態的線程。
volatile關鍵字:volatile關鍵字用于修飾變量,保證變量的可見性,即當一個線程修改了變量的值后,其他線程可以立即看到修改后的值。
wait()和notify()/notifyAll()方法:這些方法是Object類中的方法,可以實現線程之間的通信和同步。wait()方法使線程進入等待狀態,notify()方法喚醒等待狀態的線程。
CountDownLatch類:CountDownLatch是Java.util.concurrent包下的一個計數器類,可以實現線程間的同步。通過調用countDown()方法減少計數器的值,當計數器減為0時,等待的線程可以繼續執行。
CyclicBarrier類:CyclicBarrier也是Java.util.concurrent包下的一個同步輔助類,可以實現多個線程之間的同步。通過調用await()方法,線程進入等待狀態,當所有線程都調用了await()方法后,它們會同時恢復執行。
Semaphore類:Semaphore也是Java.util.concurrent包下的一個同步輔助類,可以控制同時訪問某個資源的線程數量。通過調用acquire()方法獲取許可,釋放資源時調用release()方法釋放許可。
以上是Java中常用的線程同步方法,根據具體的需求和場景選擇合適的方法進行線程同步。