楼上不对吧 两个线程都持有同一把锁时 由于都需要等待对方释放资源 才会发生死锁
举例如下 两个线程分别执行flag=0和=1的代码
- public void run()
- {
- if (flag == 1)
- {
- synchronized(TheLock.locka)
- {
- System.out.println("flag0 a");
- try{Thread.sleep(10);}catch (Exception e){}//延迟一下保证另一个线程进来
- synchronized(TheLock.lockb)//需要b锁 却已被另一个线程占用
- {
- System.out.println("flag0 b");
- }
- }
- }
- else
- {
- synchronized(TheLock.lockb)
- {
- System.out.println("flag1 b");
- try{Thread.sleep(10);}catch (Exception e){}
- synchronized(TheLock.locka)
- {
- System.out.println("flag1 a");
- }
- }
- }
- }
复制代码 |