Java中线程死锁问题

Posted skyyuan

tags:

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

我们在使用Thread时,在使用线程同步时可能会出现死锁,而死锁产生的原因是:

例:

两个类中各有两个方法,而这四种发放同步,比如顾客与服务员解决“先付款还是后付款”的问题时,就会产生死锁。

死锁产生的条件:

互斥条件

请求保持条件

不可剥夺条件

环路等待

死锁的原因:

资源竞争和进程顺序推进不当

代码:

 1 package ThreadDemo;
 2 
 3 //在一个同步方法中调用另一个对象的同步方法,可能产生死锁
 4 //死锁
 5 public class ThreadDemo7 {
 6     public static void main(String[] args) {
 7         new DeadThread();
 8     }
 9 }
10 
11 class DeadThread implements Runnable{
12     Customer c = new Customer();
13     Waiter w = new Waiter();
14     public DeadThread(){
15         new Thread(this).start();
16         w.say(c);
17     }
18     @Override
19     public void run() {
20         // TODO Auto-generated method stub
21         c.say(w);
22     }
23 }
24 
25 //顾客
26 class     Customer{
27     public synchronized void say(Waiter w){
28         System.out.println("顾客说:先吃饭再买单");
29         w.doService();
30     }
31     public synchronized void doService(){
32         System.out.println("买完单再吃饭");
33     }
34 }
35 class Waiter{
36     public synchronized void say(Customer c){
37         System.out.println("服务员说:先买单再吃饭");
38         c.doService();
39     }
40     public synchronized void doService(){
41         System.out.println("吃完饭再买单");
42     }
43 }

 

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

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

Java多线程-死锁简述

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

java线程安全之死锁

JAVA死锁排查-性能测试问题排查思路

java synchronized 死锁问题