以下的情况可能出现死锁
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);
}
}