什么是线程的死锁?

死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需的资源。

这种情况可能发生在当两个线程尝试获取其他资源的锁,而每个线程又陷入无线等待其他资源锁的释放,除非一个用户的进程被终止。
线程死锁可能发生在以下的情况:

  1. 当两个线程相互调用Thread.join();
  2. 当两个线程使用嵌套的同步块时,一个线程占用了另一个线程的必需的锁,互相等待时被阻塞,就有可能出现死锁。

举例:在一个单轨的铁路上,两条火车向不同的方向开,谁也动不了。

为什么会出现死锁?

死锁一般都是由于对共享资源的竞争所引起的。但对共享资源的竞争又不一定就会发生死锁。
死锁的发生必需满足4个必要条件:

  1. 互斥
  2. 等待/持有
  3. 非抢占
  4. 形成等待环
    原文作者:java锁
    原文地址: https://blog.csdn.net/tensionsky/article/details/55000320
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞