title: 死锁
date: 2022-12-19 09:07:16
tags: java
comments: true
categories: [java]
死锁
什么是死锁?
互相拿到对方的锁,同时又不能放弃当前的锁。指相互之间竞争相同资源的线程因为相互等待而导致永久阻塞。
死锁发生的原因
互 占 不 循:
- 互斥: 共享资源x和y只能被一个线程占用
- 占有且等待:占有且等待,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X;
- 不可抢占:其他线程不能强行抢占线程 T1 占有的资源;
- 循环等待: 线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。
避免死锁的措施
上面说到发生死锁必须同时满足四个条件,那么,我们破坏其中一个条件,就可以解决死锁的问题。如果已经发生了死锁,一般没有什么好的方法来解决,只能通过重启应用,所以如果要解决死锁问题,最好的方式就是提前规避。
首先,我们肯定不能去破坏第一个条件,锁的作用就是要互斥。所以,只能去破坏其他三个条件。
标签:占有,介绍,T1,共享资源,死锁,线程,等待 From: https://www.cnblogs.com/feihui233/p/17182713.html