黑马程序员技术交流社区
标题:
线程安全的死锁演示
[打印本页]
作者:
fmi110
时间:
2015-9-11 09:20
标题:
线程安全的死锁演示
a
/**
* 死锁演示
*/
public class DeadLock implements Runnable {
private Object objA = new Object();
private Object objB = new Object();//锁对象
private boolean flag = false;
// DeadLock(boolean b){
// this.flag = b;
// }
@Override
public void run() {
// 相互嵌套是锁,可能会出现互相等待的现象导致死锁
while(true){
if(flag){
synchronized(objA){//嵌套锁
System.out.println("if A..."+Thread.currentThread().getName());
synchronized(objB){
System.out.println("if B..."+Thread.currentThread().getName());
}
flag = flag^true; //flag取反
}
}else{
synchronized(objB){//嵌套锁
System.out.println("else A..."+Thread.currentThread().getName());
synchronized(objA){
System.out.println("else B..."+Thread.currentThread().getName());
}
flag = flag^true; //flag取反
}
}
}
}
}
复制代码
public class DeadLockTest {
/**
* 用于死锁的测试
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//建立资源对象
DeadLock d1 = new DeadLock();
//新建两个进程
new Thread(d1,"线程1").start();
new Thread(d1,"线程2").start();
}
}
复制代码
作者:
fmi110
时间:
2015-9-11 09:29
运行结果
else A...线程1 //线程1 进入else,获取锁B
else B...线程1
if A...线程1 //线程1执行完else,释放B锁,进入if,获取锁A,在等待获取B锁
else A...线程2 //线程2 持有B锁,在等待A锁
//此时出现互相等待,即死锁现象,程序无法继续运行
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2