当前位置:首页 > 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() 方法使当前线程暂停执行指定的时间,但不会释放锁。适用于需要延迟执行的场景。

java如何让线程等待

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

java如何让线程等待

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中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

如何删除java

如何删除java

卸载 Java 的步骤 Windows 系统: 打开控制面板,选择“程序和功能”或“卸载程序”,在列表中找到 Java 相关条目(如“Java Runtime Environment”或“Java D…

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

java如何创建数组

java如何创建数组

创建数组的基本方法 在Java中,数组是固定大小的同类型元素集合。创建数组需要声明数组类型并初始化。 声明数组 语法格式为 数据类型[] 数组名 或 数据类型 数组名[]: int[] arr1;…

如何搭建java环境

如何搭建java环境

下载JDK 访问Oracle官网或OpenJDK官网下载适合操作系统的JDK安装包。推荐选择长期支持版本(如JDK 17或JDK 21)。 安装JDK 运行下载的安装程序,按照向导完成安装。注意…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…