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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lovefmylgs 中级黑马   /  2014-5-23 07:39  /  933 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

帮我看下,我怎么锁都没有锁上,

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

lock.jpg

2 个回复

倒序浏览
第一:代码太模糊了,大概看了下,是死锁的代码。
第二:看到类名首字母没有大写,就不想再看了,希望楼主注意代码格式哈。
第三:楼主确定两个线程使用的是两把锁码?要不要在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. }
复制代码
回复 使用道具 举报
要知道什么情况下会发生死锁,看楼上的就知道答案了.....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马