A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄杨 中级黑马   /  2013-1-29 12:24  /  1113 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public class Test{

final Object lockA = new Object();
final Object lockB = new Object();

public static void main(String[] args) {
        Test demo = new Test();
demo.startLock();
}

public void startLock(){
ThreadA a= new ThreadA(lockA,lockB);
ThreadB b= new ThreadB(lockA,lockB);

//start threads
a.start();
b.start();
}

}

class ThreadA extends Thread{

private Object lockA = null;
private Object lockB = null;

public ThreadA(Object a, Object b){
this.lockA = a;
this.lockB = b;
}

public void run() {
synchronized (lockA) {
System.out.println("*** Thead A: ***: Lock A" );
try {
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB) {
System.out.println("*** Thead A: ***: Lock B" );
}
}

System.out.println("*** Thead A: ***: Finished" );
}

}

class ThreadB extends Thread{

private Object lockA = null;
private Object lockB = null;

public ThreadB(Object a, Object b){
this.lockA = a;
this.lockB = b;
}
public void run() {
synchronized (lockB) {
System.out.println("*** Thead B: ***: Lock B" );
try {
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockA) {
System.out.println("***** Thead B: *****: Lock A" );
}
}       

System.out.println("***** Thead B: *****: Finished" );
}

}

这是一死锁线程?  怎样才能避免死锁的发生?



评分

参与人数 1黑马币 +12 收起 理由
Rancho_Gump + 12

查看全部评分

1 个回复

倒序浏览
  1. package TestJava;

  2. public class Test {

  3.         final Object lockA = new Object();
  4.         final Object lockB = new Object();

  5.         public static void main(String[] args) {
  6.                 Test demo = new Test();
  7.                 demo.startLock();
  8.         }

  9.         public void startLock() {
  10.                 ThreadA a = new ThreadA(lockA, lockB);
  11.                 ThreadB b = new ThreadB(lockA, lockB);

  12.                 // start threads
  13.                 a.start();
  14.                 b.start();
  15.         }

  16. }

  17. class ThreadA extends Thread {

  18.         private Object lockA = null;
  19.         private Object lockB = null;

  20.         public ThreadA(Object a, Object b) {
  21.                 this.lockA = a;
  22.                 this.lockB = b;
  23.         }

  24.         public void run() {
  25.                 synchronized (lockA) {
  26.                         System.out.println("*** Thead A: ***: Lock A");
  27.                         try {
  28.                                 sleep(200);
  29.                         } catch (InterruptedException e) {
  30.                                 e.printStackTrace();
  31.                         }
  32.                 }
  33.                 synchronized (lockB) {
  34.                         System.out.println("*** Thead A: ***: Lock B");
  35.                 }
  36.                 System.out.println("*** Thead A: ***: Finished");
  37.         }

  38. }

  39. class ThreadB extends Thread {

  40.         private Object lockA = null;
  41.         private Object lockB = null;

  42.         public ThreadB(Object a, Object b) {
  43.                 this.lockA = a;
  44.                 this.lockB = b;
  45.         }

  46.         public void run() {
  47.                 synchronized (lockB) {
  48.                         System.out.println("*** Thead B: ***: Lock B");
  49.                         try {
  50.                                 sleep(200);
  51.                         } catch (InterruptedException e) {
  52.                                 e.printStackTrace();
  53.                         }
  54.                 }
  55.                 synchronized (lockA) {
  56.                         System.out.println("***** Thead B: *****: Lock A");
  57.                 }
  58.                 System.out.println("***** Thead B: *****: Finished");
  59.         }

  60. }
复制代码
改成这样就不会死锁了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马