线程同步导致的问题让多线程代码安全运行的方法是同步所有方法 。
效率低 。
如果每个方法都是同步的 , 那么大部分线程都会频繁阻塞,使得程序失去了并发的意义 。-
当使用多个锁时(Java中的每个对象都有自己的内置锁),线程之间可能会发生死锁 。
哲学家进餐问题-死锁-示意图哲学家进餐问题-死锁-代码代码非常简单 。哲学家类只有三个属性,左右筷子和随机:
哲学家阶层
以下是具体的逻辑代码:
测试此代码:
哲学家进餐问题-死锁-代码运行多久会死锁?在测试了五个哲学家的例子后,它最长可以运行一周,直到某个时刻突然停止 。
哲学家的用餐问题-僵局-原因如果所有的哲学家决定同时吃饭 , 拿起左手边的筷子,那就没法进行下去了——每个人都拿着一根筷子,等着右手边的人放下 。然后僵局出现了 。
哲学家进餐问题-死锁条件当一个线程需要多个锁时,需要考虑死锁的可能性 。
哲学家的用餐问题——如何避免僵局总是以全局固定顺序获取多个锁 。
不是按照左右手的顺序拿筷子 , 而是按照筷子的数量来获取锁(不用关心编号的具体规则,只要保证编号是全局唯一有序的就行) 。
如果获取锁的代码以集中的方式编写,则有利于维护这种全局顺序 。对于较大的程序来说,使用锁的地方比较分散 , 到处都按照这个顺序是不切实际的 。
使用对象的哈希值作为锁的全局顺序 。它适用于所有Java对象,不需要为锁对象定义和维护特殊的顺序 。
【哲学家就餐问题如何避免死锁 如何避免死锁】但是,对象的哈希值不能保证唯一性(对象的哈希值可能是重复的) 。除非万不得已,否则不要使用这种技术 。
- 面试基本问题 面试有哪些基本问题
- 路由下的网络唤醒问题高人进谢谢
- 微信把对方删除他里面还有我吗 不会再有问题
- 寿桃蛋糕在家怎么制作
- 无主之地3局内人怎么玩 无主之地3局内人常见问题汇总
- 煤气罐安全问题你知多少
- 盆栽梅花的种植方法和注意事项 栽种梅花应该注意的问题
- 多肉的栽种方法及注意事项 多肉栽种时应注意什么问题
- 如何运动更利于减肥 运动减肥需要注意的四个问题是什么
- 黑执事假夏尔的身份问题
