码迷,mamicode.com
首页 > 编程语言 > 详细

Java中线程死锁问题

时间:2018-06-29 11:04:45      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:pack   rgs   sys   四种   产生   环路   dos   rri   使用   

我们在使用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中线程死锁问题

标签:pack   rgs   sys   四种   产生   环路   dos   rri   使用   

原文地址:https://www.cnblogs.com/skyyuan/p/9241757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!