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