Java中是否可以绝对保证死锁?

时间:2014-05-26 11:08:14

标签: java multithreading

我知道我可以创建一个非常容易死锁的Java代码。有许多现成的例子,在运行时,几乎可以立即提供死锁。

但是,我想知道理论上是否可以编写绝对可以保证死锁的Java代码?

也就是说,通过分析这样的代码,可以证明会出现死锁?

1 个答案:

答案 0 :(得分:0)

好的,那么是什么导致了僵局?线程1锁定资源1,线程2锁定资源2,线程1尝试锁定资源2,线程2尝试锁定资源1.以下是保证这种情况的方法:

  1. 线程1锁定资源1
  2. 线程1设置标志FLAG
  3. 线程1产生线程2
  4. 线程1等待线程2重置FLAG(例如,在while循环中)。我们不能在这里使用锁,因为我们无法区分尚未使用的锁和已经使用并已被释放的锁(据我所知)
  5. 线程2锁定资源2
  6. 线程2重置FLAG
  7. 线程2尝试锁定资源1
  8. 线程1恢复,并尝试锁定资源2
  9. =>瞧,死锁 我想你可以自己把它变成代码(FLAG应该是易失性的)