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中线程死锁问题的主要内容,如果未能解决你的问题,请参考以下文章