死锁

public class DeadLock {

	public static void main(String[] args) {
		DeadLock dl = new DeadLock();
		dl.myRun();
	}

	public void myRun() {
		MyLock ml = new MyLock();
		Thread t1 = new Thread(ml,"线程1");
		Thread t2 = new Thread(ml,"线程2");
		t1.start();
		t2.start();
	}
	
	public class MyLock implements Runnable{

		private boolean flag = true;
		private Object key1 = new Object();
		private Object key2 = new Object();
		
		public void run() {
			if(flag) {
				flag = false;
				synchronized(key1) {
					String name = Thread.currentThread().getName();
					System.out.println(name + "进入了");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					synchronized(key2) {
						String n = Thread.currentThread().getName();
						System.out.println(n + "进入了");
					}
				}
			}else {
				flag = true;
				synchronized(key2) {
					String name = Thread.currentThread().getName();
					System.out.println(name + "进入了");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					synchronized(key1) {
						String n = Thread.currentThread().getName();
						System.out.println(n + "进入了");
					}
				}
			}
		}
		
	}
}

程序运行之后结果如下:

线程1和线程2永远也不会进入对方进程,实现了一个简单的死锁。

posted @ 2020-09-21 16:41  JW_Chen9596  阅读(84)  评论(0)    收藏  举报