Java中多線程數據同步的方法有以下幾種:
synchronized關鍵字:使用synchronized關鍵字修飾方法或代碼塊,可以保證同一時刻只有一個線程可以訪問被synchronized修飾的代碼,其他線程需要等待鎖釋放才能訪問。
ReentrantLock類:ReentrantLock是Java提供的一個可重入鎖,通過該鎖可以實現同步訪問共享資源。使用ReentrantLock需要顯示地獲取鎖和釋放鎖,可以靈活地控制鎖的粒度。
volatile關鍵字:volatile關鍵字用于修飾變量,可以保證可見性和有序性。當一個變量被volatile修飾時,每個線程都會讀取它的最新值。但是volatile無法保證原子性,如果需要保證原子操作,仍然需要使用synchronized或ReentrantLock。
wait()和notify()/notifyAll()方法:wait()方法使當前線程進入等待狀態,notify()/notifyAll()方法喚醒等待的線程。這些方法必須在同步代碼塊中使用,并且要先獲取對象的鎖才能調用。
CountDownLatch類:CountDownLatch是一個同步輔助類,可以讓一個或多個線程等待其他線程完成操作后再繼續執行。通過調用await()方法使線程等待,調用countDown()方法使計數器減1,當計數器減為0時,等待的線程可以繼續執行。
CyclicBarrier類:CyclicBarrier也是一個同步輔助類,可以讓多個線程相互等待,然后再一起執行。與CountDownLatch不同的是,CyclicBarrier可以循環使用,當計數器減為0時,所有等待的線程被釋放,并可以重新開始下一輪等待。
以上是常見的幾種多線程數據同步的方法,根據具體的場景和需求選擇合適的方法。