legongju.com
我们一直在努力
2025-01-16 21:15 | 星期四

java wait()方法如何进行条件等待

在Java中,wait()方法通常与synchronized关键字和Object类的notify()notifyAll()方法一起使用,以实现线程间的条件等待和通知。以下是一个简单的示例,说明如何使用wait()方法进行条件等待:

public class ConditionWaitExample {
    private static final Object lock = new Object();
    private static boolean condition = false;

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            synchronized (lock) {
                System.out.println("Thread 1: Waiting for the condition...");
                try {
                    lock.wait(); // 线程1在此处等待条件满足
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 1: Condition met!");
            }
        });

        Thread t2 = new Thread(() -> {
            synchronized (lock) {
                try {
                    Thread.sleep(3000); // 线程2等待3秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                condition = true; // 设置条件满足
                System.out.println("Thread 2: Setting the condition to true.");
                lock.notify(); // 唤醒等待的线程(线程1)
            }
        });

        t1.start();
        t2.start();
    }
}

在这个示例中,我们有两个线程:t1t2。线程t1lock对象上等待条件满足,而线程t2在3秒后将条件设置为满足并唤醒等待的线程。

  1. 线程t1进入synchronized块,并调用lock.wait()方法进入等待状态。此时,线程t1会释放lock对象的锁,允许其他线程(如线程t2)获取锁并执行同步代码块。
  2. 线程t2获取lock对象的锁,然后休眠3秒。
  3. 线程t2将条件设置为满足(condition = true),然后调用lock.notify()方法唤醒等待的线程(线程t1)。
  4. 线程t1被唤醒后,重新尝试获取lock对象的锁。由于锁已被线程t2持有,线程t1将继续等待,直到线程t2释放锁。
  5. 当线程t2释放锁后,线程t1获取锁并继续执行,输出"Thread 1: Condition met!"。

这个示例展示了如何使用wait()方法进行条件等待以及如何使用notify()方法唤醒等待的线程。在实际应用中,你可能需要根据具体需求调整代码。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/44404.html

相关推荐

  • Java编程:stdin的多线程处理

    Java编程:stdin的多线程处理

    在Java编程中,可以使用多线程来处理stdin(标准输入),以实现并发处理输入数据的功能。以下是一个简单的示例代码,演示了如何使用多线程处理stdin输入数据:

  • Java中如何实现声音的录制与播放

    Java中如何实现声音的录制与播放

    在Java中实现声音的录制与播放可以使用JavaSound API。以下是一个简单的示例代码:
    录制声音:
    import javax.sound.sampled.*; public class AudioRec...

  • Java sound编程实战技巧分享

    Java sound编程实战技巧分享

    在Java中实现音频处理和播放可以使用Java Sound API。下面是一些Java Sound编程的实战技巧: 使用AudioSystem类来获取音频输入和输出设备。可以使用getMixerInfo...

  • 如何在Java应用中集成声音功能

    如何在Java应用中集成声音功能

    在Java应用中集成声音功能可以使用Java内置的音频库javax.sound,以下是一些基本步骤: 导入javax.sound包:在代码中导入javax.sound包中的相关类。 import java...

  • c++ mkdir函数如何进行路径处理

    c++ mkdir函数如何进行路径处理

    在C++中,你可以使用std::filesystem库中的create_directory函数来创建目录
    #include #include namespace fs = std::filesystem; int main() { // 定义要创...

  • c++ mkdir函数如何进行权限管理

    c++ mkdir函数如何进行权限管理

    在C++中,mkdir函数本身不提供直接进行权限管理的功能 使用chmod函数更改目录权限: 在创建目录后,可以使用chmod函数更改其权限。chmod函数接受两个参数:文件名...

  • c++ mkdir函数如何进行错误处理

    c++ mkdir函数如何进行错误处理

    在C++中,mkdir函数是用于创建新目录的。为了进行错误处理,你可以使用errno变量和strerror函数。errno是一个全局变量,用于存储最后一个错误代码,而strerror函...

  • java异常机制如何进行异常日志记录

    java异常机制如何进行异常日志记录

    在Java中,异常机制主要通过try-catch-finally语句块和throw关键字来实现。为了进行异常日志记录,你可以使用以下几种方法: 使用Java原生的日志框架: Java提供...