java线程安全之死锁问题

/**
* 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();

}

}

你可能感兴趣的:(线程安全)