手写一个简单死锁:
思路:2个线程、2个对象锁。当线程t1锁住对象o1后,打算去锁o2;与此同时,线程t2锁住了o2,打算去锁o1。这时就产生了死锁。
/*** * 手写一个死锁* @author tijian.zhou* 当线程t1锁住对象o1后,打算去锁o2,与此同时,线程t2锁住了对象o2,打算去锁o1,这时就产生了死锁*/
public class DeadLock {public static void main(String[] args) {Object o1 = new Object();Object o2 = new Object();Thread t1 = new Thread(new T1(o1,o2));Thread t2 = new Thread(new T2(o1,o2));t1.start();System.out.println("t1 start");t2.start();System.out.println("t2 start");}}
class T1 implements Runnable{Object o1;Object o2;public T1(Object o1,Object o2) {this.o1 = o1;this.o2 = o2;}@Overridepublic void run() {// TODO Auto-generated method stubsynchronized (o1) {try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (o2) {}}}
}
class T2 implements Runnable{Object o1;Object o2;public T2(Object o1,Object o2) {this.o1 = o1;this.o2 = o2;}@Overridepublic void run() {// TODO Auto-generated method stubsynchronized (o2) {try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized (o1) {}}}
}