当前位置:首页 > Java

java如何让线程等待

2026-03-03 14:24:13Java

线程等待的实现方法

在Java中,线程等待可以通过多种方式实现,以下是几种常见的方法:

使用 Object.wait() 方法

调用 wait() 方法使当前线程进入等待状态,直到其他线程调用 notify()notifyAll() 方法唤醒它。需要注意的是,wait() 必须在同步块或同步方法中调用。

synchronized (lockObject) {
    try {
        lockObject.wait(); // 线程进入等待状态
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}

使用 Thread.sleep() 方法

sleep() 方法使当前线程暂停执行指定的时间,但不会释放锁。适用于需要延迟执行的场景。

try {
    Thread.sleep(1000); // 线程休眠1秒
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

使用 CountDownLatch

CountDownLatch 是一个同步辅助类,允许一个或多个线程等待其他线程完成操作。

CountDownLatch latch = new CountDownLatch(1);

// 等待线程
new Thread(() -> {
    try {
        latch.await(); // 等待计数器归零
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}).start();

// 触发线程
new Thread(() -> {
    latch.countDown(); // 计数器减1
}).start();

使用 CyclicBarrier

CyclicBarrier 允许一组线程互相等待,直到所有线程都到达某个屏障点。

CyclicBarrier barrier = new CyclicBarrier(2);

new Thread(() -> {
    try {
        barrier.await(); // 等待其他线程到达
    } catch (Exception e) {
        e.printStackTrace();
    }
}).start();

使用 Semaphore

Semaphore 用于控制同时访问特定资源的线程数量,通过 acquire()release() 方法实现线程等待和释放。

Semaphore semaphore = new Semaphore(0);

new Thread(() -> {
    try {
        semaphore.acquire(); // 等待许可
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}).start();

new Thread(() -> {
    semaphore.release(); // 释放许可
}).start();

注意事项

  • 使用 wait()notify() 时,必须确保在同步块中调用,以避免 IllegalMonitorStateException
  • sleep() 不会释放锁,而 wait() 会释放锁。
  • 高并发场景下,CountDownLatchCyclicBarrierwait()notify() 更易用且安全。
  • 避免在循环中直接调用 sleep()wait(),可能导致性能问题或死锁。

java如何让线程等待

标签: 线程java
分享给朋友:

相关文章

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

java如何创建线程

java如何创建线程

创建线程的方法 在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

java如何

java如何

Java 基础语法 Java 是一种面向对象的编程语言,语法相对严谨。每个 Java 程序必须包含一个 main 方法作为程序入口。以下是一个简单的 Java 程序示例: public class…

java程序如何运行

java程序如何运行

编写Java代码 使用文本编辑器或IDE(如IntelliJ IDEA、Eclipse)编写Java源代码,保存为.java文件。例如: public class HelloWorld {…

如何运行java程序

如何运行java程序

编写Java代码 创建一个以.java为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

java如何创建类

java如何创建类

创建类的基本语法 在Java中,类通过class关键字定义,语法如下: [访问修饰符] class 类名 { // 成员变量(属性) // 构造方法 // 成员方法 }…