java线程安全之死锁问题

来源:互联网 发布:刚开淘宝店铺卖什么好 编辑:程序博客网 时间:2024/05/17 02:41

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

}

1 0
原创粉丝点击