潇洒子弦 2011-10-10 11:59
浏览 187
已采纳

死锁的问题

public class TestDeadLock{
static Object O1 = new Object ();
static Object O2 = new Object ();
public static void main(String args[]){
Runner6 T1 = new Runner6();
Runner6 T2 = new Runner6();
T1.flag = false;
T1.start();
T2.start();
}
}

class Runner6 extends Thread{
public boolean flag = true;
public void run(){

    if(flag){
    synchronized(TestDeadLock.O1){
        System.out.println("O1锁住了");
        try{sleep(1000);}catch(InterruptedException e){}
        }
    synchronized(TestDeadLock.O2){
        System.out.println("2");
        }
 } 
 else{
    synchronized(TestDeadLock.O2){
                System.out.println("O2锁住了");
        try{sleep(1000);}catch(InterruptedException e){ }
        }       
    synchronized(TestDeadLock.O1){
        System.out.println("1");
        }
    }

    }
}   

怎么把这串代码搞成死锁?

展开全部

  • 写回答

3条回答

  • long13131462101 2011-10-10 13:54
    关注

    [code="java"]

    给个采纳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • long13131462101 2011-10-10 12:05
    关注

    [code="java"]

    给你一个例子:

    package cn.com.io.threadDemo.ThreadSyn;

    /**

    • 通过两个属性值创建死锁
    • 本程序通过两个线程各自锁定一个属性值,这样两个线程都无法结束,造成死锁
    • @author Administrator
      *
      */
      public class ThreadSyn2 implements Runnable{

      private static Object obj1=new Object();

      private static Object obj2=new Object();

      /**

      • @param args */ public static void main(String[] args) { ThreadSyn2 ts1=new ThreadSyn2(); ThreadSyn2 ts2=new ThreadSyn2();

      Thread t1=new Thread(ts1);//线程1
      Thread t2=new Thread(ts2);//线程2
      t1.setName("theOne");
      t2.setName("theTwo");

      t1.start();
      t2.start();

      }

      public void run() {
      String name=Thread.currentThread().getName();
      if(name.equals("theOne")){
      method1(name);
      }else{
      method2(name);
      }

      }

      //线程1的方法锁定obj1,线程2就无法完成
      private void method1(String name) {
      System.out.println(name);
      synchronized(obj1){
      try {
      Thread.sleep(1000);
      } catch (InterruptedException e) {
      e.printStackTrace();
      }
      synchronized(obj2){
      System.out.println(obj2);
      }

      }

      }

      //线程1的方法锁定obj2,线程1就无法完成
      private void method2(String name) {
      System.out.println(name);
      synchronized(obj2){
      try {
      Thread.sleep(1000);
      } catch (InterruptedException e) {
      e.printStackTrace();
      }
      synchronized(obj1){
      System.out.println(obj1);
      }
      }

      }
      }

    [/code]

    展开全部

    评论
  • AngelAndAngel 2011-10-10 13:18
    关注

    最简单了 你把每个synchronized里面都加个相应的
    TestDeadLock.O2.wait()或者TestDeadLock.O1.wait()就行了 :wink:

    评论
收起2条回答
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部