黑马程序员技术交流社区

标题: 为什么死锁里面的锁只有是Object才好使 [打印本页]

作者: 三十而立    时间: 2014-1-18 23:07
标题: 为什么死锁里面的锁只有是Object才好使
  1. public class DeadLockDemo {
  2.         public static void main(String[] args) {
  3.                 Ticket3 ticket = new Ticket3();
  4.                 Thread t1 = new Thread(ticket);
  5.                 Thread t2 = new Thread(ticket);
  6.                 t1.start();
  7.                 try{Thread.sleep(10);}catch(Exception e){}
  8.                 ticket.flag = true;
  9.                 t2.start();
  10.         }
  11. }
  12. class Ticket3 implements Runnable {
  13.         private int ticket = 100;
  14.         public boolean flag = false;
  15.         Object obj = new Object();
  16.         @Override
  17.         public void run() {
  18.                 if (flag) {
  19.                         while (true) {
  20.                                 synchronized (obj) {
  21.                                         show();
  22.                                 }
  23.                         }
  24.                 } else {
  25.                         while (true) {
  26.                                 show();
  27.                         }
  28.                 }
  29.         }
  30.         private synchronized void show() {
  31.                 synchronized (obj) {
  32.                         if(ticket>0){
  33.                                 try{Thread.sleep(10);}catch(Exception e){}
  34.                                 System.out.println(Thread.currentThread().getName() + "..."
  35.                                                 + ticket--);
  36.                         }
  37.                 }
  38.         }
  39. }
复制代码


经过测试,使用this或者是类名.class,都不会发生死锁现象,求解释。
作者: 孤独的天奇    时间: 2014-1-19 00:14
不一定非是object,只要保证每个线程拿到的锁对象是同一个对象就可以了
作者: 黄晓鑫    时间: 2014-1-19 13:20
锁要保证唯一 就不会死锁
作者: 三十而立    时间: 2014-1-19 14:08
孤独的天奇 发表于 2014-1-19 00:14
不一定非是object,只要保证每个线程拿到的锁对象是同一个对象就可以了

恩,你说的对的。死锁发生的原因是两个不同的锁互相抢资源,也存在和谐的情况,我之前测试都是和谐的情况,可能和我的电脑是双核的cpu有关系。




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