死锁
来源:互联网 发布:网络故障诊断1一1 编辑:程序博客网 时间:2024/06/05 16:32
什么是死锁?
死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。
以生活中的一些事为例:
小情侣吵架了,男孩子在等着女孩子认错,女孩子同时也在等男孩子认错,但双方又都不肯认错,这样两人就没法和好。这就跟死锁很相似了,A持有锁,同时等待B手上持有的锁,B持有锁,同时等待A手上持有的锁,各自又都不肯释放自己手头上的锁,这样就造成了死锁。
看看下面这段程序:
package thread;public class DeadLock {private static Object A = new Object();private static Object B = new Object();private void deadLock(){new Thread(()->{synchronized(A){try {//休眠为了让另一个进程先运行Thread.sleep(2000);synchronized (B) {System.out.println("B");}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}).start();new Thread(()->{synchronized (B) {synchronized (A) {System.out.println("A");}}}).start();}public static void main(String[] args) {new DeadLock().deadLock();}}
运行之后,控制台没有任何输出,这时候我们使用jdk自带的检查工具jconsole看看,可以看到检测到死锁
Thread-0在等待着Thread-1上的锁,Thread-1在等待着Thread-0上的锁,各不释放,就造成死锁。
这里顺带提一下,使用多线程编程的时候,最好给每个新程一个线程名,而不是用默认的线程名,这样当线程数量多的时候,一旦出现问题,很难排查。
阅读全文
0 0
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- ACM_08
- App调用系统Camera拍照或者从Gallery选取图片,返回时先显示手机Launcher或者前一个界面,再跳转到当前activity
- 配合C++的Algorithm基础
- QT重写控件函数并添加鼠标单击事件
- 网易云JAVA入门编程题6-1
- 死锁
- 蘑菇街2016招聘笔试
- POJ1703 解题报告
- C#程序运行不了CLR20R3解决方法
- Java IO流——字符流读写操作
- Javascript遍历map集合以及map对象
- Halcon入门之腐蚀膨胀
- 列表选择的简单封装
- 网易云JAVA入门编程题6-2