本帖最后由 奋斗的小胖子 于 2014-2-11 20:26 编辑  
 
我自己写了个死锁代码,发现线程调用的时候用run锁不上,用start才锁得什么?怎么回事?- /*建立一个死锁范例
 
 -  * 需求分析:1,首先要有多个线程
 
 -  *                         2,应该有两个方法,分别互相嵌套加锁
 
 -  *                         3,建立两把锁                
 
 -  * */
 
 - class  synchronizedDemo
 
 - {
 
 -         public static void main(String[] args)
 
 -         {
 
 -                 DeadDemo d1=new DeadDemo(true);
 
 -                 DeadDemo d2=new DeadDemo(false);
 
 -                 Thread t1=new Thread(d1);
 
 -                 Thread t2=new Thread(d2);
 
 - //                t1.start();
 
 - //                t2.start();
 
 -                 t1.run();
 
 -                 t2.run();
 
 -         }
 
 - }
 
  
- class DeadDemo  implements Runnable
 
 - {
 
 -         //这里的flag要确保两个线程走不同的方法
 
 -         private boolean flag;
 
 -         //这里输入的不同值将确保线程访问不同的方法
 
 -         DeadDemo(boolean flag)
 
 -         {
 
 -                 this.flag=flag;
 
 -         }
 
 -         @Override
 
 -         public void run() 
 
 -         {
 
 -                 while(true)
 
 -                 {
 
 -                         if(flag==true)
 
 -                         {
 
 -                                 synchronized (Lock.lockA)
 
 -                                 {
 
 -                                         System.out.println("if------lockA");
 
 -                                         synchronized (Lock.lockB)
 
 -                                         {
 
 -                                                 System.out.println("if------lockB");
 
 -                                         }
 
 -                                         
 
 -                                 }
 
 -                         }
 
 -                         else
 
 -                         {
 
 -                                 synchronized (Lock.lockB)
 
 -                                 {
 
 -                                         System.out.println("else------lockB");
 
 -                                         synchronized (Lock.lockA)
 
 -                                         {
 
 -                                                 System.out.println("else------lockA");
 
 -                                         }
 
 -                                 }
 
 -                         }
 
 -                 }
 
 -         }
 
  
-         
 
 - }
 
 - //建立两把锁
 
 - class Lock
 
 - {
 
 -         public static  Lock  lockA=new Lock();
 
 -         public static  Lock  lockB=new Lock();
 
 - }
 
 
  复制代码 
 |