java多线程--死锁
(五)死锁
在多线程编程中,死锁是一个较为严重的问题,它指的是多个线程在执行过程中,因争夺资源而造成的一种互相等待的僵局,若无外力干涉,这些线程都将无法继续执行。下面为你详细介绍死锁的相关内容:
死锁产生的必要条件
- 互斥条件:资源不能被共享,只能由一个线程占用。例如,打印机在同一时刻只能被一个进程使用,不能同时被多个进程打印任务 。
- 请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放。比如线程 A 已经获得了资源 X,在请求资源 Y 未得到满足时,不会释放已经持有的资源 X 。
- 不剥夺条件:线程已获得的资源,在未使用完之前,不能被其他线程强行剥夺,只能在使用完后由自己释放 。
- 循环等待条件:若干线程之间形成一种环形的资源请求关系。即线程 A 等待线程 B 释放资源,线程 B 等待线程 C 释放资源,以此类推,最后线程 N 又等待线程 A 释放资源 。
检测死锁
1、终端---jps---jstackxxxxx
2、终端---jconsole(图形化工具)