0%

并发之死锁.md

[TOC]

Java编程写一个会导致死锁的程序

  1. 两个线程里面分别持有两个lock对象:lock1和lock2。
  2. 线程1的run()方法中同步代码块先获取lock1的对象锁,Thread.sleep(50),
  3. 线程2的run()方法中同步代码块先获取lock2的对象锁,接着获取lock1的对象锁,当然这时lock1的对象锁已经被线程1锁持有,线程2等待。
  4. 线程1睡完,线程2已经获取了lock2的对象锁了,线程1此时尝试获取lock2的对象锁,此时一个死锁就形成了。

参考

死锁
Deadlock
避免死锁