黑马程序员技术交流社区

标题: 菜鸟求教 [打印本页]

作者: 黄杨    时间: 2013-1-29 12:24
标题: 菜鸟求教

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" );
}

}

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




作者: 赵熠东(赵东东)    时间: 2013-2-16 18:58
  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. }
复制代码
改成这样就不会死锁了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2