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

2024-12-05 18:20:22
推荐回答(4个)
回答1:

执行次序问题,t1如果先执行,因为执行时间太短,可能要到一直执行完后才能轮到t2执行
在synchronized(MyLock.locka)和synchronized(MyLock.lockb) 后分别加上
Thread.sleep(2000); //睡2s

回答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");
}
}
}

回答3:

可能是执行时间的问题,可以在第一次加锁后sleep一些时间,再申请第二个锁试试

回答4:

你看下打印,是否是"if locka“ 然后"if lockb"这样才会死锁,如果不是的话就在System.out.println("if locka"); 后面加 Thread.sleep(1000)试试