一、死锁的产生条件
- 互斥使用:一个资源只能分配给一个线程
- 不可剥夺:资源只能由占有者释放,申请者不能强制剥夺
- 请求保持:线程申请资源时,保持对原有资源的占有
- 循环等待:存在一个进程等待队列:{P1 , P2 , … , Pn}, 其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路
代码 -
引用链接:https://www.jianshu.com/p/8cf78bf94f9d
二、死锁代码示例
自定义一个线程实现类,
package com.yunshi.synchronizedtest;
import org.hibernate.validator.internal.util.privilegedactions.NewInstance;
/**
*
死锁条件
互斥使用:一个资源只能分配给一个线程
不可剥夺:资源只能由占有者释放,申请者不能强制剥夺
请求保持:线程申请资源时,保持对原有资源的占有
循环等待:存在一个进程等待队列:{P1 , P2 , … , Pn}, 其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路
代码
思路
定义两个资源o1,o2
对象deadLock1占有资源o1,需要资源o2
对象deadLock2占有资源o2,需要资源o1
死锁产生
* @author Administrator
*
*/
public class DeadLock implements Runn