package com.vince;
/**
* 多线程要进行资源的共享,就需要同步,但同步过多,就可能造成死锁
* 死锁的操作一般是在程序运行的时候才有可能出现
* 线程死锁:在一个同步方法中调用了另一个对象的同步方法,可能产生死锁
*/
public class DeadThreadDemo {
public static void main(String[] args) {
new DeadThread();
}
}
//顾客
class Customer{
public synchronized void say(Waiter w){
System.out.println("顾客说:先吃饭再买单!");
w.doService();
}
public synchronized void doService(){
System.out.println("同意了,买完单再吃饭!");
}
}
//服务员
class Waiter{
public synchronized void say(Customer c){
System.out.println("服务员说:先买单再吃饭!");
c.doService();
}
public synchronized void doService(){
System.out.println("同意了,吃完饭再买单!");
}
}
//死锁线程
class DeadThread implements Runnable{
Customer c = new Customer();
Waiter w = new Waiter();
public DeadThread(){
new Thread(this).start();
w.say(c);
}
@Override
public void run() {
c.say(w);
}
}
在IDEA中测试不出来死锁现象,在Eclispse和控制台可以此时出来
控制台测试: