死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。
1、产生死锁的条件
1.1、互斥条件:一个资源只能被一个线程占用,直到被该线程释放;
1.2、请求和保持条件:一个线程因请求被占用资源而发生阻塞时,对已获得的资源保持不放;
1.3、不剥夺条件:任何一个资源在没被该线程释放之前,任何其他线程都无法对他剥夺占用 ;
1.4、循环等待条件:当发生死锁时,所等待的线程必定会形成一个环路(类似于死循环),造成永久阻塞。
2、避免死锁的方法
2.1、加锁顺序:如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生;
2.2、加锁时限:若一个线程没有在给定的时限内成功获得所有需要的锁,则会进行回退并释放所有已经获得的锁,然后等待一段随机的时间再重试;
2.3、死锁检测。