java如何等待
等待线程执行完成的方法
使用 Thread.join() 方法可以让当前线程等待目标线程执行完毕。调用该方法会阻塞当前线程,直到目标线程终止。
Thread thread = new Thread(() -> {
// 线程任务代码
});
thread.start();
thread.join(); // 等待线程执行完成
使用 Object.wait() 和 notify()
wait() 方法使当前线程进入等待状态,直到其他线程调用 notify() 或 notifyAll() 方法唤醒它。使用时必须持有对象的监视器锁。
synchronized (lockObject) {
lockObject.wait(); // 释放锁并等待
// 被唤醒后继续执行
}
CountDownLatch 实现同步
CountDownLatch 是一个同步辅助类,允许一个或多个线程等待直到其他线程完成操作。
CountDownLatch latch = new CountDownLatch(1);
new Thread(() -> {
// 执行任务
latch.countDown(); // 计数减一
}).start();
latch.await(); // 等待计数归零
CyclicBarrier 等待多个线程
CyclicBarrier 可以让一组线程互相等待,直到所有线程都到达某个屏障点。
CyclicBarrier barrier = new CyclicBarrier(2);
new Thread(() -> {
// 执行任务
barrier.await(); // 等待其他线程
}).start();
barrier.await(); // 主线程等待
CompletableFuture 异步等待
CompletableFuture 提供了异步编程的能力,可以等待异步任务完成。
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
// 异步任务
});
future.get(); // 阻塞等待任务完成
Thread.sleep() 暂停执行
Thread.sleep() 方法可以让当前线程暂停执行指定的时间,但不释放锁。
Thread.sleep(1000); // 暂停1秒
LockSupport.park() 暂停线程
LockSupport.park() 方法可以暂停当前线程的执行,直到调用 unpark() 方法。

Thread thread = new Thread(() -> {
LockSupport.park(); // 暂停线程
// 被唤醒后继续执行
});
thread.start();
LockSupport.unpark(thread); // 唤醒线程






