首页 > 编程知识 正文

java多线程notify(java多线程状态)

时间:2023-05-06 09:20:36 阅读:93312 作者:4553

Java多线程

设计典型场景,讲述wait ()、notify (通知)、notifyAll )、生产消费者。

有生产者、消费者、缓冲队列(size=10 )。

生产者继续将数据放入缓冲队列,一旦队列满了,则由wait ()、notify ) )消费者进行处理。

消费者继续从缓冲队列中获取数据,队列空了,则wait ()、notify ) )生产者继续放置数据。

生产者:

生产者

notifyAll )放在a处,表示缓冲队列已满,督促消费者处理。

放在b上,如果缓冲队列有数据,表示督促消费者处理。

消费者:

消费者

notifyAll )放在a处,表示缓冲队列空了,注意生产者放入数据。

放在b上,代表只要处理好缓冲队列中的一个数据,就会提醒生产者放置数据。

测试类:

测试类

首先,我们来介绍一下notify (和notifyAll )。 从字面上的意思也很明白。 两者都是用于唤醒wait ()的线程。 多个线程wait ) )、notify ) )仅唤醒其中一个,则其中一个应查看JVM。 notifyAll () ()为所有wait ) ) )的线程,让我们来看看JVM,了解哪些可以锁定和执行。

例如,10个吃饭的人在睡觉,我是送饭的人,我随机叫醒其中一个吃饭。 这是通知。 我一喊“吃饭啊”,10个人都起来抢饭。 这是通知全部。 哪个能夺走取决于生命。

使用wait、notify、notifyAll时需要注意的事项:

1、必须在同步化中使用。

2、必须在while内而不是if内使用wait。 这是为了检查线程在觉醒前后是否满足条件。 以刚才的饭菜为例,有两个人吃饭,没有饭就睡觉,有饭就被叫醒,去领饭。 但是,醒来后,吃之前必须检查是否真的有饭吃。 多线程的话,唯一的饭可能会被别人先拿走。 这个时候应该睡觉的,不检查的话,会永远去吃,会发生错误。

3、在多线程处理的公共对象(数据)处使用wait。 在本文中,是缓冲队列。

4、多个生产者、多个消费者等,如果是真正的多线程,使用notifyAll比较合适。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。