4 package cn.com.io.threadDemo.ThreadSyn; 5 6 /** 7 * 通过两个属性值创建死锁 8 * 本程序通过两个线程各自锁定一个属性值,这样两个线程都无法结束,造成死锁 9 * @author Administrator 10 * 11 */ 12 public class ThreadSyn2 implements Runnable{ 13 14 private static Object obj1=new Object(); 15 16 private static Object obj2=new Object(); 17 18 /** 19 * @param args 20 */ 21 public static void main(String[] args) { 22 ThreadSyn2 ts1=new ThreadSyn2(); 23 ThreadSyn2 ts2=new ThreadSyn2(); 24 25 Thread t1=new Thread(ts1);//线程1 26 Thread t2=new Thread(ts2);//线程2 27 t1.setName("theOne"); 28 t2.setName("theTwo"); 29 30 t1.start(); 31 t2.start(); 32 33 } 34 35 public void run() { 36 String name=Thread.currentThread().getName(); 37 if(name.equals("theOne")){ 38 method1(name); 39 }else{ 40 method2(name); 41 } 42 43 } 44 45 //线程1的方法锁定obj1,线程2就无法完成 46 private void method1(String name) { 47 System.out.println(name); 48 synchronized(obj1){ 49 try { 50 Thread.sleep(1000); 51 } catch (InterruptedException e) { 52 e.printStackTrace(); 53 } 54 synchronized(obj2){ 55 System.out.println(obj2); 56 } 57 } 58 } 59 60 //线程1的方法锁定obj2,线程1就无法完成 61 private void method2(String name) { 62 System.out.println(name); 63 synchronized(obj2){ 64 try { 65 Thread.sleep(1000); 66 } catch (InterruptedException e) { 67 e.printStackTrace(); 68 } 69 synchronized(obj1){ 70 System.out.println(obj1); 71 } 72 } 73 } 74 }