新人求教 关于死锁。

foods00010 2016-09-27 04:25:19
class Test implements Runnable {
private static int ticket = 100;
private boolean flag = true;
Object obj = new Object();

public void setFlag(boolean flag) {
this.flag = flag;
}

public void Test() {
}

public void run() {
if (flag) {
while (true) {
synchronized (obj) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + "....." + ticket--);

}
}
}
} else while (true) {
show();}
}

public synchronized void show() {

synchronized (obj) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + "....." + ticket--);

}
}

}
}

public class Ticket {
public static void main(String[] args) {
Test T = new Test();

Thread t1 = new Thread(T);
Thread t2 = new Thread(T);

t1.start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
T.setFlag(false);
t2.start();

}
}


求大神指导指导。。运行多次还没有出现死锁。看着没有什么问题啊。
...全文
449 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumlee 2016-09-30
  • 打赏
  • 举报
回复
这段程序根本就不会导致死锁啊。
lliiqiang 2016-09-29
  • 打赏
  • 举报
回复
为什么死锁啊?设置flag=false的时候第一个线程可能已经运行进去执行第一个代码了,也可能没有运行进去,然后再执行第二个代码。但是两个都是循环获得锁再释放,不会死锁。
a1846427859 2016-09-28
  • 打赏
  • 举报
回复
你这个写的有问题啊,同步函数用的是锁是this,而同步代码块用的是obj,所以你无论怎么运行都是各拿各的锁,不会造成死锁,你在同步代码块中调用show方法就会导致死锁,因为线程一拿了obj,线程二拿了this,线程二不释放this,线程一进不到show方法,show方法拿不到obj,show中的代码块拿不到obj,无法执行,导致死锁。你倒是是在show方法中加同步代码块啊,说了这么多,还不理解,就回去理解下死锁原理吧!
a1846427859 2016-09-28
  • 打赏
  • 举报
回复
你这个写的有问题啊,同步函数用的是锁是this,而同步代码块用的是obj,所以你无论怎么运行都是各拿各的锁,不会造成死锁,你在同步代码块中调用show方法就会导致死锁,因为线程一拿了obj,线程二拿了this,线程二不释放this,线程一进不到show方法,show方法拿不到obj,show中的代码块拿不到obj,无法执行,导致死锁。你倒是是在show方法中加同步代码块啊,说了这么多,还不理解,就回去理解下死锁原理吧!
qq_24710075 2016-09-28
  • 打赏
  • 举报
回复
所谓死锁,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。很显然,如果没有外力的作用,那麽死锁涉及到的各个进程都将永远处于封锁状态。 你这个案例,只是两个线程进入,然后睡眠,并没有出现无限僵持下去的局面,所以更不可能出现死锁的情况。
小灰狼 2016-09-28
  • 打赏
  • 举报
回复
楼主0结帖率??

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧