执行次序问题,t1如果先执行,因为执行时间太短,可能要到一直执行完后才能轮到t2执行
在synchronized(MyLock.locka)和synchronized(MyLock.lockb) 后分别加上
Thread.sleep(2000); //睡2s
要不这样
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");
}
}
}
可能是执行时间的问题,可以在第一次加锁后sleep一些时间,再申请第二个锁试试
你看下打印,是否是"if locka“ 然后"if lockb"这样才会死锁,如果不是的话就在System.out.println("if locka"); 后面加 Thread.sleep(1000)试试