穷的都要死锁了

前不久去天天看看面试,有一道题在我看来很是奇葩,题目是写一个死锁实例出来。其实这次面试我也是很想吐槽的,改日等我吃饱喝足再吐吧,最近这个月实在穷的很,吃饭的钱都没有啦,深深的体会到了一块钱难倒英雄好汉的赶脚。如果你要是个妹子就帮我做顿饱饭,如果你是个汉子就隔三差五请我吃顿饭,要不然在下面打赏小的几块钱也行,在下实在感激不尽,临表涕零,不知所言。还是进入正题吧,在实际编程中都是要避免出现死锁。死锁出现就是两个线程等待对方等待的资源,实际上是两个线程共享的东西。当时这个题我是跪了。毕竟本人很菜,从来没手写过代码,习惯了PC上敲代码,还真是有必要加强手写代码的训练啊。下面是我后来在eclipse里面敲的代码。

package chuangyeyilu;
 
public class DeadLock extends Thread {
	public int flag = 1;
	// 静态对象是类的所有对象共享的
	private static Object obj1 = new Object(), obj2 = new Object();
 
	@Override
	public void run() {
		System.out.println("flag=" + flag);
		if (flag == 1) {
			synchronized (obj1) {
				try {
					Thread.sleep(1000);
				} catch (Exception e) {
					e.printStackTrace();
				}
				synchronized (obj2) {
					System.out.println("2");
				}
			}
		}
		if (flag == 0) {
			synchronized (obj2) {
				try {
					Thread.sleep(1000);
				} catch (Exception e) {
					e.printStackTrace();
				}
				synchronized (obj1) {
					System.out.println("1");
				}
			}
		}
	}
 
	public static void main(String[] args) {
		DeadLock td1 = new DeadLock();
		DeadLock td2 = new DeadLock();
		td1.flag = 1;
		td2.flag = 0;
		// td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。
		// td2的run()可能在td1的run()之前运行 ,两个线程互相等待obj1和obj2两个对象造成死锁
		new Thread(td1).start();
		new Thread(td2).start();
	}
}
打赏

作者:

操千曲而后晓声,观千剑而后识器

暂无关键词!