JAVA经典题--死锁案例

Posted Kingram

tags:

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

死锁原理: 两个线程相互等待对方释放同步监视器

例子程序:

 1 public class TestDeadLock implements Runnable {
 2     
 3     public int flag = 1;
 4     static Object o1 = new Object(), o2 = new Object();
 5 
 6     public void run() {
 7         if (flag == 1) {
 8             synchronized (o1) {
 9                 try {
10                     Thread.sleep(500);
11                 } catch (Exception e) {
12                     e.printStackTrace();
13                 }
14                 synchronized (o2) {
15                     System.out.println("1");
16                 }
17             }
18         }
19         if (flag == 0) {
20             synchronized (o2) {
21                 try {
22                     Thread.sleep(500);
23                 } catch (Exception e) {
24                     e.printStackTrace();
25                 }
26                 synchronized (o1) {
27                     System.out.println("0");
28                 }
29             }
30         }
31     }
32     
33     public static void main(String[] args) {
34         TestDeadLock td1 = new TestDeadLock();
35         TestDeadLock td2 = new TestDeadLock();
36         td1.flag = 1;
37         td2.flag = 0;
38         Thread t1 = new Thread(td1);
39         Thread t2 = new Thread(td2);
40         t1.start();
41         t2.start();
42     }
43 }

 

以上是关于JAVA经典题--死锁案例的主要内容,如果未能解决你的问题,请参考以下文章

Java并发编程死锁

Java多线程:线程同步详解

Mysql并发时经典常见的死锁原因及解决方法

一道经典面试题:字符串在Java中如何通过“引用”传递

Java多线程产生死锁的一个简单案例

Java多线程产生死锁的一个简单案例