黑马程序员技术交流社区
标题:
为什么死锁里面的锁只有是Object才好使
[打印本页]
作者:
三十而立
时间:
2014-1-18 23:07
标题:
为什么死锁里面的锁只有是Object才好使
public class DeadLockDemo {
public static void main(String[] args) {
Ticket3 ticket = new Ticket3();
Thread t1 = new Thread(ticket);
Thread t2 = new Thread(ticket);
t1.start();
try{Thread.sleep(10);}catch(Exception e){}
ticket.flag = true;
t2.start();
}
}
class Ticket3 implements Runnable {
private int ticket = 100;
public boolean flag = false;
Object obj = new Object();
@Override
public void run() {
if (flag) {
while (true) {
synchronized (obj) {
show();
}
}
} else {
while (true) {
show();
}
}
}
private synchronized void show() {
synchronized (obj) {
if(ticket>0){
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName() + "..."
+ ticket--);
}
}
}
}
复制代码
经过测试,使用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