首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
在监视器(Monitor)内部,是如何做线程同步的?程序应该
[问答题]
请你说明一下在监视器(Monitor)内部,是如何做到线程同步的?在程序又应该做哪种级别的同步呢?
添加笔记
求解答(0)
邀请回答
收藏(19)
分享
纠错
3个回答
添加回答
3
科科卡夫
这里的监视器应该是管程吧
管程用来解决线程间的互斥与同步两大问题
互斥,同一时间一个管程中只能运行一个线程,对应java中的
synchronized
关键字
同步,其实就是解决线程间如何协同工作的问题,对应java中的
wait(),notify(),notifyAll()
方法。
上面加粗的部分构成了java中管程的组件,我们要做的就是怎么使用它们以及注意哪些点
比如大家都这么用wait()方法:
while(条件不满足){ wait(); }
为什么这里要用while循环。
这是因为对于notify之后,何时让出CPU的问题,java的设计者采用了MESA的设计模式。
这种模式的特点就是线程A因为某个条件满足(就是while循环里的条件)执行notify唤醒线程B,但A不会立即停止或阻塞自己以让出CPU,他还会继续运行,而被唤醒的线程B也只是变成了就绪态,并没有运行,只有等到A自然阻塞或跑完整个代码段或CPU调度使线程B得到时间片,线程B才能从上次自己阻塞的位置——紧邻wait()语句之后开始运行,这期间可能因为A的继续运行比如消耗了一些资源使条件变得又不满足了。
在这种情况下对B的期望是不要运行,因为条件不满足嘛。有while循环的话,B进入循环后的第一件事就是进行新一轮的循环,直接执行wait,挂起自己。不用while或者使用if的时候B一定会跨过这道检验。
另外还有synchronized给谁加锁的问题,notify与notityAll用哪个的问题
个人理解,出错的地方还请各位大佬指正
发表于 2019-05-02 21:14:11
回复(0)
1
江畔8670
考察点:JAVA线程同步 参考回答: 监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。
发表于 2019-05-01 21:35:52
回复(0)
0
一名菜鸡来学习
监视器和锁在Java虚拟机中是一块使用的,监视器监视一块同步代码块,确保只有一个线程执行同步代码块,每一个监视器都和一个对象相关联,线程在获取锁之前不允许执行同步代码块。
发表于 2020-02-28 15:23:43
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
Java工程师
上传者:
小小
难度:
3条回答
19收藏
1938浏览
热门推荐
相关试题
明明的随机数
数组
评论
(3692)
来自
华为研发工程师编程题
5.下列判断正确的是( )
资料分析
言语理解与表达
资料分析
评论
(1)
已知a
40
=...
京东
职能
2019
财务
保险
评论
(1)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
《魔兽世界》中,下列不属于玩家可以...
游戏常识
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题