线程死锁

Posted 学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程死锁相关的知识,希望对你有一定的参考价值。

所谓的线程死锁,是指在多线程运行的过程中,线程1拥有锁a,而需要锁b来继续执行,
而此时,线程2拥有锁b而需要锁a来继续执行,那么此时会形成死锁,两个线程会同时等待。
在编程的过程中应尽量的避免线程死锁。
有时在面试中会要求写出一个死锁的程序演示,如下:
 1 //写一个死锁程序
 2 public class DeadLock {
 3      //主程序执行
 4      public static void main(String[] args) {
 5           Thread thread1 = new Thread(new MyThread(true));
 6           Thread thread2 = new Thread(new MyThread(true));
 7           thread1.start();
 8           thread1.start();
 9           thread2.start();
10      }
11 }
12 class MyThread implements Runnable{
13      private boolean flag;
14      //标记,用来分割线程执行部分
15      public MyThread(boolean flag) {
16           this.flag = flag;
17      }
18      @Override
19      public void run() {
20           if (flag) {
21                //线程1拥有锁1而需要锁2
22               synchronized(MyLock.object1) {
23                    System.out.println("锁1");
24                    synchronized(MyLock.object2) {
25                         System.out.println("锁2");
26                    }
27               }
28           }else {
29                //线程2拥有锁2而需要锁1
30               synchronized(MyLock.object2) {
31                    System.out.println("锁2");
32                    synchronized(MyLock.object1) {
33                         System.out.println("锁1");
34                    }
35               }
36           }
37 
38      }
39 }
40 class MyLock{
41      //创建两个显式的锁
42      static Object object1 = new Object();
43      static Object object2 = new Object();
44 }

 

以上是关于线程死锁的主要内容,如果未能解决你的问题,请参考以下文章

手撕死锁代码

死锁原理及代码

多线程死锁

怎么处理JAVA多线程死锁问题?

55行代码实现Java线程死锁

死锁的概念以及处理方式