在 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();
}
}
}
根据你的需求选择合适的方法来实现线程同步。