Java中的wait和notify方法

鳄鱼君

发表文章数:642

热门标签

, , ,

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Java » Java中的wait和notify方法

wait和notify方法不是线程对象的方法,是java中任何一个java对象都有的方法,因为这两个方式是Object类中自带的。
wait方法作用:正在对象上活动的线程进入等待状态,无期限等待,直到被唤醒为止

notify方法作用:唤醒处于等待状态的线程

package com.javase.threading;

import java.util.ArrayList;
import java.util.List;

/*使用wait方法和notify方法实现生产者和消费者模型*/
public class ProCusModel {
    public static void main(String[] args) {
        // 创建一个仓库对象
        List list = new ArrayList();
        // 创建2个线程对象
        Thread t1 = new Thread(new Produce(list));
        Thread t2 = new Thread(new Consume(list));

        t1.setName("生产者线程");
        t2.setName("消费者线程");

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

// 生产线程
class Produce implements Runnable {
    // 仓库
    private List list;

    public Produce(List list) {
        this.list = list;
    }

    @Override
    public void run() {
        // 一直生产
        while (true) {
            synchronized (list) {
                if (list.size() > 0) {
                    // 当前线程进入等待状态, 并且释放list集合的锁
                    try {
                        list.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                Object obj = new Object();
                list.add(obj);
                System.out.println(Thread.currentThread().getName() + "---->" + obj);
                // 唤醒消费者消费
                list.notify();

            }
        }
    }
}

// 消费线程
class Consume implements Runnable {
    // 仓库
    private List list;

    public Consume(List list) {
        this.list = list;
    }

    @Override
    public void run() {
        // 一直消费
        while (true) {
            synchronized (list) {
                if (list.size() == 0) {
                    // 仓库已经空了,消费者等待,释放掉list集合的锁
                    try {
                        list.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                // 仓库中有数据
                Object obj = list.remove(0);
                System.out.println(Thread.currentThread().getName() + "--->" + obj);
                // 唤醒生产哲生成
                list.notify();
            }
        }
    }
}

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Java中的wait和notify方法》 发布于2020-08-19

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

1 + 9 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册