死锁,饥饿,活锁
1,死锁
多个线程,各自占对方的资源,都不愿意释放,从而造成死锁
工具:使用jconsole可以检测程序运行的死锁线程
2,饥饿
多个线程访问同一个同步资源,有些线程总是没有机会得到互斥锁,这种就叫做饥饿。
出现饥饿的三种情况
a,高优先级的线程吞噬了低优先级的线程的CPU时间片
理论上来说,线程优先级高的线程会比线程优先级低的线程获得更多的执行机会,但是java的线程优先级绝对出现这样的效果。
经过测试,优先级高的出现频率会比优先级低的高很多
不同的操作系统对线程的优先级支持是不同的,规定是在1-10之间,java通过3个常量来屏蔽这种操作系统的底层差异化。
b,线程被永久阻塞在等待进入同步代码块的状态
c,等待的线程永远不被唤醒
如何避免饥饿问题
a,设置合理的优先级
b,使用公平锁来代替synchronized这种互斥锁
3,活锁
举个例子,两个人在走廊上碰见,大家都互相很有礼貌,互相礼让,A从左到右,B也从从左转向右,发现又挡住了地方,继续转换方向,但又碰到了,反反复复,一直没有机会运行下去。
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦