多线程(十):线程间通信,等待唤醒机制


prtyaa
prtyaa 2023-12-28 17:01:46 53763 赞同 0 反对 0
分类: 资源
上篇文章中,这个运行结果不爽。造成这个结果的原因是什么? 一个原因是当t1抢到线程优先权,让input录入mike man的时候,线程出了同步方法之后,t2抢到线程优先权,然后output输出mike man,然后t1抢不到线程优先权,这时候t2又抢到线程优先权,所以又输出mike man,然后之后t1总是抢不到线程优先权,t2抢到线程优先权,一直疯狂的输出mike man 因为要的效果是,录入一次打印一次,交替着来。

重点来了

我们可以再input的时候,再Res r里设置一个布尔值false,当存完数据的时候,把false改为true,然后直接wait()。然后output把值取走之后把true再改为false,然后output wait()之前把input叫醒。然后input醒了,写数据,false改为true,然后把output叫醒,然后input自己再wait()

其他代码没变。运行结果:

当wait()的时候,程序就停了,不走了,当notify()的时候,就把当前锁上wait的线程唤醒了。

wait() notify() notifyAll()都使用在同步中,因为要对持有监视器,也就是锁的线程操作,所以要使用在同步中,因为只有同步中才具有锁

只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。唤醒和等待必须是同一个锁

 

 

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  125
统信桌面专业版【全盘安装UOS系统】介绍  120
银河麒麟桌面操作系统安装佳能打印机驱动方法  111
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!