首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java - 如何知道线程何时等待?

在 Java 中,要了解线程何时等待,可以使用以下方法:

  1. 使用 Thread.join() 方法:当一个线程调用另一个线程的 join() 方法时,当前线程会等待目标线程执行完毕后才继续执行。
代码语言:java
复制
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();
  1. 使用 CountDownLatch 类:CountDownLatch 可以让一个或多个线程等待其他线程完成某些操作。
代码语言:java
复制
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();
  1. 使用 CyclicBarrier 类:CyclicBarrier 可以让多个线程相互等待,直到所有线程都到达某个状态,然后同时执行。
代码语言:java
复制
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();
}
  1. 使用 Semaphore 类:Semaphore 可以控制对共享资源的访问权限,例如,限制线程数量。
代码语言:java
复制
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 中监控线程何时等待。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券