当前位置: 代码迷 >> 综合 >> 手写一个简单死锁
  详细解决方案

手写一个简单死锁

热度:52   发布时间:2024-01-25 01:22:28.0

手写一个简单死锁:

思路: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) {}}}
}

 

  相关解决方案