java写一个死锁的例子,执行结果不是死锁,看看我哪儿写错了?

classTestimplementsRunnable{privatebooleanflag;Test(booleanflag){this.flag=flag;}publ... class Test implements Runnable{ private boolean flag; Test (boolean flag) { this.flag=flag; }
public void run() { if(flag) { synchronized(MyLock.locka) { System.out.println("if locka"); synchronized(MyLock.lockb) { System.out.println("if lockb"); } } } else { synchronized(MyLock.lockb) { System.out.println("else lockb"); synchronized(MyLock.locka) { System.out.println("else locka"); } } } }}
class MyLock{ static Object locka = new Object(); static Object lockb = new Object();}
class DeadLockTest{ public static void main(String[] args) { Thread t1 = new Thread(new Test(true)); Thread t2 = new Thread(new Test(false)); t1.start(); t2.start(); }}
展开
 我来答
小狂中E
2014-01-17 · TA获得超过1418个赞
知道大有可为答主
回答量:1514
采纳率:66%
帮助的人:1033万
展开全部
执行次序问题,t1如果先执行,因为执行时间太短,可能要到一直执行完后才能轮到t2执行
在synchronized(MyLock.locka)和synchronized(MyLock.lockb) 后分别加上
Thread.sleep(2000); //睡2s
百度网友95494dd
2014-01-16
知道答主
回答量:10
采纳率:0%
帮助的人:8.2万
展开全部
要不这样
if(flag)
{
synchronized(MyLock.locka)
{
System.out.println("if locka");
try{
Thread.sleep(500); 这里让时间缓存下,else那里同理试试看
} catch(InterruptedException e) {
e.printStackTrace() ;
}
synchronized(MyLock.lockb)
{
System.out.println("if lockb");
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0a6eea2
2014-01-16 · TA获得超过281个赞
知道答主
回答量:59
采纳率:0%
帮助的人:26.6万
展开全部
可能是执行时间的问题,可以在第一次加锁后sleep一些时间,再申请第二个锁试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
longxtuo
2014-01-17
知道答主
回答量:55
采纳率:100%
帮助的人:18.9万
展开全部
你看下打印,是否是"if locka“ 然后"if lockb"这样才会死锁,如果不是的话就在System.out.println("if locka"); 后面加 Thread.sleep(1000)试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式