/**
* Description: 线程死锁演示
* Copyright (c) , 2016, Jansonxu
* This program is protected by copyright laws.
* Program Name:deadLock.java
* Date: 2016年1月25日
*
* @author 李阳
* @version : 1.0
*/
package Safe;
public class DeadLock {
private Object obj1=new Object();
private Object obj2=new Object();
private boolean flg=false;//标记值 通过标记值的变化 两个线程可以交替执行
//线程死锁演示
class MyThread extends Thread{
@Override
public void run() {
if(flg){
//让一个线程执行
synchronized (obj1) {
System.out.println("线程【"+this.getName()+"】获得了锁对象obj1的锁标记,执行了哦.."
+ "等待获取obj2的锁标记");
//获得了 标记之后 才能继续往下走
flg=!flg;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2) {
System.out.println("线程【"+this.getName()+"】同时获得了锁对象obj1和obj2的锁标记开始执行了哦");
}
}
}else{
synchronized (obj2) {
System.out.println("线程【"+this.getName()+"】获得了锁对象obj2的锁标记,执行了哦.."
+ "等待获取obj1的锁标记");
//获得了 标记之后 才能继续往下走
flg=!flg;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj1) {
System.out.println("线程【"+this.getName()+"】同时获得了锁对象obj2和obj1的锁标记开始执行了哦");
}
}
}
}
}
public static void main(String[] args) {
DeadLock outer=new DeadLock();
MyThread thread=outer.new MyThread();
MyThread thread1=outer.new MyThread();
thread1.start();
thread.start();
}
}