JAVA线程的那些事?( 三 )


线程死锁可能发生在以下的情况:

  1. 当两个线程相互调用Thread.join();
  2. 当两个线程使用嵌套的同步块时,一个线程占用了另一个线程的必需的锁,互相等待时被阻塞,就有可能出现死锁 。
死锁一般都是由于对共享资源的竞争所引起的 。但对共享资源的竞争又不一定就会发生死锁 。
死锁的发生必需满足4个必要条件:
  1. 互斥
  2. 等待/持有
  3. 非抢占
  4. 形成等待环




推荐阅读