黑马程序员技术交流社区

标题: 为什么同步代码没锁主,帮忙看一下 [打印本页]

作者: lovefmylgs    时间: 2014-5-23 07:39
标题: 为什么同步代码没锁主,帮忙看一下
帮我看下,我怎么锁都没有锁上,

lock.jpg (15.52 KB, 下载次数: 10)

lock.jpg

作者: 875588381    时间: 2014-5-23 08:18
第一:代码太模糊了,大概看了下,是死锁的代码。
第二:看到类名首字母没有大写,就不想再看了,希望楼主注意代码格式哈。
第三:楼主确定两个线程使用的是两把锁码?要不要在static final Object a = new Object() / static final Object b = new Object() 试一下呢?或者使用一个类,来明确锁对象。

下面的代码绝对能锁上,希望对你有所帮助:)
  1. class Chap28Demo3
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new Thread(new DeadLock(true)).start();
  6.                 new Thread(new DeadLock(false)).start();
  7.         }
  8. }

  9. class DeadLock implements Runnable
  10. {
  11.         private boolean flag;
  12.         public DeadLock(boolean flag) {
  13.                 this.flag = flag;
  14.         }
  15.         public void run() {
  16.                 if(flag) {
  17.                         while(true) {
  18.                                 synchronized(MyLock.lockA) {
  19.                                         System.out.println(Thread.currentThread().getName() + "....if lockA");
  20.                                         synchronized(MyLock.lockB) {
  21.                                                 System.out.println(Thread.currentThread().getName() + "....if lockB");
  22.                                         }
  23.                                 }
  24.                         }
  25.                 }
  26.                 else {
  27.                         while(true) {
  28.                                 synchronized(MyLock.lockB) {
  29.                                         System.out.println(Thread.currentThread().getName() + "....else lockB");
  30.                                         synchronized(MyLock.lockA) {
  31.                                                 System.out.println(Thread.currentThread().getName() + "....else lockA");
  32.                                         }
  33.                                 }
  34.                         }
  35.                 }
  36.         }
  37. }

  38. class MyLock
  39. {
  40.         public static final Object lockA = new Object();
  41.         public static final Object lockB = new Object();
  42. }
复制代码

作者: Dark_Horse    时间: 2014-5-23 09:59
要知道什么情况下会发生死锁,看楼上的就知道答案了.....




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