Java多线程死锁

为了确保线程的安全,我们会通过对象锁来实现线程中共享数据的同步。但是对象锁引起的等候很容易导致另一种问题,那就是“死锁”。所谓“死锁”就是指两个或者两个以上的线程都在等待对方释放对象资源而进入一种不可调节的状态。
在程序设计中,死锁是无法预知和无法避免的,这就像我们不知道计算机操作系统什么时候会死锁一样,尽管这种情况并非经常出现,但是一旦碰到,应用程序的调试讲变得异常艰难。死锁是多线程编程的产物,我们只能做到尽可能地预防。例如在获取多个对象锁时,尽管在所有线程中都以相同的顺序获取,不要滥用同步机制,避免无谓的同步控制等。
应用中最常见的死锁模式为:当线程threadA拥有对象obj1上的对象锁时,为了完成任务同时需要获取对象obj2上的对象锁,而此时线程threadB正拥有对象obj2的对象锁,线程threadB为了完成任务同样需要获取对象obj1的对象锁。这时这两个线程threadA和threadB在对象资源上既无法做到获取另一对象上的对象锁(对方线程已经占用),同时也无法释放已经拥有的对象锁(自身线程还未执行完毕),那么应用程序讲进入无期限的等待,于是死锁就发生了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值