在 Java 中,要了解线程何时等待,可以使用以下方法:
Thread.join()
方法:当一个线程调用另一个线程的 join()
方法时,当前线程会等待目标线程执行完毕后才继续执行。Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// 执行任务
}
});
t1.start();
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
t1.join(); // 等待 t1 线程执行完毕
// 执行任务
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t2.start();
CountDownLatch
类:CountDownLatch
可以让一个或多个线程等待其他线程完成某些操作。CountDownLatch latch = new CountDownLatch(1);
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// 执行任务
latch.countDown(); // 减少计数器
}
});
t1.start();
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
latch.await(); // 等待计数器变为 0
// 执行任务
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t2.start();
CyclicBarrier
类:CyclicBarrier
可以让多个线程相互等待,直到所有线程都到达某个状态,然后同时执行。CyclicBarrier barrier = new CyclicBarrier(3);
for (int i = 0; i < 3; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// 执行任务
barrier.await(); // 等待其他线程
// 执行任务
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}).start();
}
Semaphore
类:Semaphore
可以控制对共享资源的访问权限,例如,限制线程数量。Semaphore semaphore = new Semaphore(2);
for (int i = 0; i < 5; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
semaphore.acquire(); // 获取许可
// 执行任务
semaphore.release(); // 释放许可
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
通过以上方法,可以在 Java 中监控线程何时等待。
领取专属 10元无门槛券
手把手带您无忧上云