黑马程序员技术交流社区

标题: 关于多线程死锁的问题,请教一下 [打印本页]

作者: 落马居士    时间: 2015-7-9 12:43
标题: 关于多线程死锁的问题,请教一下

我写了一个代码运行会死锁的类,但是我在eclipse上运行了八十来遍,结果硬是一次死锁情况都没遇上,请教一下,是我的代码有小问题了还是我人品有问题


  1. package cn.itcast;
  2. class Demoa{}

  3. class Demob{}


  4. public class DiedClok extends Thread {
  5.         Demoa da = new Demoa();
  6.         Demob db = new Demob();
  7.        
  8.         private boolean flag;
  9.         public DiedClok(boolean flag){
  10.                 this.flag = flag;
  11.         }
  12.          
  13.         public void run(){
  14.                 if(flag){synchronized(da){
  15.                         System.out.println(getName()+"da");
  16.                         }synchronized(db){
  17.                         System.out.println(getName()+"db");
  18.                         }
  19.                 }else {synchronized(db){
  20.                         System.out.println(getName()+"db");
  21.                         }synchronized(da){
  22.                         System.out.println(getName()+"da");
  23.                        
  24.                 }
  25.                
  26.                
  27.                
  28.                
  29.         }
  30.        

  31.         }
  32.         }
复制代码


  1. package cn.itcast;

  2. public class DeidclokDemo {
  3.         public static void main(String[] args) {
  4.                 DiedClok dc =new DiedClok(true);
  5.                 DiedClok dc1 = new DiedClok (false);
  6.                 dc.setName("1号");
  7.                 dc1.setName("2号");
  8.                 dc.start();
  9.                 dc1.start();
  10.                
  11.         }

  12. }
复制代码

作者: 梁思宇    时间: 2015-7-9 12:50
本帖最后由 梁思宇 于 2015-7-9 12:53 编辑

Demoa da = new Demoa();
Demob db = new Demob();
这个...
你建了两个类的实例,分别执行
然后每个实例里都有一个da,也都有一个db
这就相当于,一个人两把钥匙...
而不是两个人两把钥匙....
所以锁不上

作者: cyd1058    时间: 2015-7-9 12:55
给力!加油!
作者: 杜弦东.    时间: 2015-7-9 12:55
这能锁上我直播吃键盘
作者: 闪电无忧    时间: 2015-7-9 22:16
这个问题好多人都会碰到,你需要在自己设定的锁前面加上private static  final 修饰,这样才会是所有对象共用的锁
作者: 落马居士    时间: 2015-7-10 20:04
闪电无忧 发表于 2015-7-9 22:16
这个问题好多人都会碰到,你需要在自己设定的锁前面加上private static  final 修饰,这样才会是所有对象共 ...

谢了啊。。。。。




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