线程死锁示例

Posted 清风拂来

tags:

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

线程死锁:

 1 package com.iotek.synchronizedtest;
 2 
 3 public class DeadThread {
 4 
 5     /**
 6      * 线程死锁示例
 7      * 相互等待锁的释放,导致死锁,应避免同步块里面出现锁的嵌套!!!
 8      * @param args
 9      */
10     public static void main(String[] args) {
11         Example example = new Example();
12         DieThread1 thread1 = new DieThread1(example);
13         thread1.start();
14         DieThread2 thread2 = new DieThread2(example);
15         thread2.start();
16         
17     }
18 
19 }
20 
21 class DieThread1 extends Thread {
22     private Example example = null;
23 
24     public DieThread1(Example example) {
25         super();
26         this.example = example;
27     }
28 
29     @Override
30     public void run() {
31         example.method1();
32     }
33 }
34 
35 class DieThread2 extends Thread {
36     private Example example = null;
37 
38     public DieThread2(Example example) {
39         super();
40         this.example = example;
41     }
42 
43     @Override
44     public void run() {
45         example.method2();
46     }
47 }
48 
49 class Example {
50     private Object obj1 = new Object();
51     private Object obj2 = new Object();
52 
53     public void method1() {
54         synchronized (obj1) {
55             // 同步代码块,获取对象obj1的锁
56             try {
57                 Thread.sleep(1000); // 线程等待
58             } catch (InterruptedException e) {
59                 e.printStackTrace();
60             }
61             synchronized (obj2) {
62                 // 获取对象obj1的锁的同时,获取obj2的锁
63                 System.out.println("method1");
64             }
65         }
66     }
67 
68     public void method2() {
69         synchronized (obj2) {
70             // 同步代码块,获取对象obj2的锁
71             try {
72                 Thread.sleep(1000); // 线程等待
73             } catch (InterruptedException e) {
74                 e.printStackTrace();
75             }
76             synchronized (obj1) {
77                 // 获取对象obj2的锁的同时,获取obj1的锁
78                 System.out.println("method2");
79             }
80         }
81     }
82 
83 }

 

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

多线程中的死锁示例

线程同步

深入理解Java虚拟机——可视化监控工具(Jconsole)线程死锁监控示例

深入理解Java虚拟机——可视化监控工具(Jconsole)线程死锁监控示例

线程死锁示例

网络编程基础--多线程---concurrent.futures 模块---事件Event---信号量Semaphore---定时器Timer---死锁现象 递归锁----线程队列queue(示例代码