Java中什么是死锁,怎么解决死锁的问题?

死锁

死锁就是两个或者两个以上的线程在运行时争夺同一个共享资源导致互相等待的一个现象,如果没有外部干预的话,这几个线程将会一直处于阻塞状态(同步阻塞),无法继续执行。

死锁触发有四个条件:

1.互斥条件:共享资源A和共享资源B只能被一个线程占用。

2.请求和保持条件:线程Thread1占有共享资源A时,在等待共享资源B的时候是不会释放共享资源A的。

3.不可抢占条件:在共享资源A被Thread1线程占有的情况下,其他线程是无法去强行占有共享资源A的。

4.循环等待条件:线程Thread1在等待线程Thread2所占有的资源,而线程Thread2也在等待着线程Thread1所占有的资源。

解决方法

当线程陷入死锁状态,那就只能由外部直接进行干预,可以采用的方法有重启、kill线程等,因此当我们在编写代码时就要去刻意规避死锁的问题,避免同时触发以上四个条件,但其中“互斥条件”属于锁本身的特征,无法破坏这样的规则,而其他三个条件是有对应的解决方案的。

1.请求和保持条件:当我们的锁第一次执行的时候,就一次性申请所有的共享资源。

2.不可抢占条件:如果一个线程已经申请了部分共享资源,但是另一部分申请不到,则主动释放掉所占有的所有共享资源。

3.循环等待条件:给资源一个编号,让线程按照编号顺序去申请资源

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值