在 Java 中,要同步執行新建的線程,可以使用以下方法:
synchronized
關鍵字:在需要同步的方法或代碼塊上添加 synchronized
關鍵字。這將確保在同一時刻只有一個線程可以訪問該方法或代碼塊。
public class MyRunnable implements Runnable {
private final Object lock = new Object();
@Override
public void run() {
synchronized (lock) {
// 需要同步的代碼
}
}
}
ReentrantLock
類:ReentrantLock
是一個可重入的互斥鎖,提供了比 synchronized
更靈活的鎖定機制。
import java.util.concurrent.locks.ReentrantLock;
public class MyRunnable implements Runnable {
private final ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
lock.lock();
try {
// 需要同步的代碼
} finally {
lock.unlock();
}
}
}
CountDownLatch
類:CountDownLatch
是一個同步輔助類,允許一個或多個線程等待直到一組操作完成。
import java.util.concurrent.CountDownLatch;
public class MyRunnable implements Runnable {
private final CountDownLatch latch = new CountDownLatch(1);
@Override
public void run() {
// 執行任務
latch.countDown(); // 任務完成后,計數器減一
}
public void waitForTask() throws InterruptedException {
latch.await(); // 等待任務完成
}
}
CyclicBarrier
類:CyclicBarrier
是一個同步輔助類,允許一組線程相互等待,直到所有線程都準備好繼續執行。
import java.util.concurrent.CyclicBarrier;
public class MyRunnable implements Runnable {
private final CyclicBarrier barrier = new CyclicBarrier(2); // 設置為 2,因為有兩個線程需要等待
@Override
public void run() {
try {
// 執行任務
barrier.await(); // 等待其他線程完成任務
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}
根據你的需求選擇合適的方法來實現線程同步。