Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java wait notify

作者:狂神战天   发布日期:2025-09-23   浏览:77

class SharedResource {
    private int data = 0;
    private boolean available = false;

    // 生产者线程调用此方法
    public synchronized void produce(int value) throws InterruptedException {
        while (available) {
            wait(); // 如果资源已可用,则等待,释放锁并进入等待状态
        }
        data = value;
        available = true;
        notify(); // 唤醒一个等待的消费者线程
    }

    // 消费者线程调用此方法
    public synchronized int consume() throws InterruptedException {
        while (!available) {
            wait(); // 如果资源不可用,则等待,释放锁并进入等待状态
        }
        available = false;
        notify(); // 唤醒一个等待的生产者线程
        return data;
    }
}

public class ProducerConsumerExample {
    public static void main(String[] args) {
        SharedResource resource = new SharedResource();

        // 生产者线程
        Thread producer = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                try {
                    System.out.println("Producing: " + i);
                    resource.produce(i);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });

        // 消费者线程
        Thread consumer = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                try {
                    System.out.println("Consuming: " + resource.consume());
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });

        producer.start();
        consumer.start();
    }
}

解释说明:

  1. SharedResource 类:

    • data:存储共享的数据。
    • available:标记数据是否可用。
    • produce(int value):生产者调用此方法来生产数据。如果数据已经存在(availabletrue),则生产者线程会调用wait()进入等待状态,直到消费者消费了数据并调用notify()唤醒它。
    • consume():消费者调用此方法来消费数据。如果数据不可用(availablefalse),则消费者线程会调用wait()进入等待状态,直到生产者生产了数据并调用notify()唤醒它。
  2. ProducerConsumerExample 类:

    • 创建了一个SharedResource对象,用于在生产者和消费者之间共享数据。
    • 启动两个线程:一个是生产者线程,负责生产数据;另一个是消费者线程,负责消费数据。
    • 使用synchronized关键字确保同一时间只有一个线程可以访问共享资源,从而避免竞态条件。
  3. wait() 和 notify() 方法:

    • wait():使当前线程等待,直到其他线程调用notify()notifyAll()方法唤醒它。调用wait()时,线程会释放锁,并进入等待状态。
    • notify():唤醒一个正在等待该对象监视器的线程。如果有多个线程在等待,则由JVM选择其中一个线程进行唤醒。

上一篇:java 实体转json

下一篇:java 获取ip地址

大家都在看

java连接数据库的代码

java djl

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java发送qq邮件

java 判断

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站