以下的情况可能出现死锁
1.一个对象的同步方法去调用另一个对象的同步方法,同时另一个对象的同步方法也在调用这个对象的同步方法,导致一定几率的死锁,不一定每次都会出现死锁,模拟的代码如下
package threadpool;
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(“ok先办事, 先给钱”);
}
}
//死锁线程
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() {
// TODO Auto-generated method stub
c.say(w);
}
}