编辑器:Notepad++;学习视频:毕向东Java基础教程
简单的死锁示例:
/*
死锁示例
*/
class DeadClock implements Runnable
{
private boolean flag;
DeadClock(boolean flag)
{
this.flag = flag;
}
public void run()
{
if(flag)
{
while(true)
{
synchronized(MyClock.locka)
{
System.out.println(Thread.currentThread().getName()+"...if clocka");
synchronized(MyClock.lockb)
{
System.out.println(Thread.currentThread().getName()+"...if clockb");
}
}
}
}
else
{
while(true)
{
synchronized(MyClock.lockb)
{
System.out.println(Thread.currentThread().getName()+"...else clockb");
synchronized(MyClock.locka)
{
System.out.println(Thread.currentThread().getName()+"...else clocka");
}
}
}
}
}
}
class MyClock
{
public static final Object locka = new Object();
public static final Object lockb = new Object();
}
class DeadClockDemo
{
public static void main(String[] args)
{
/*
两个线程,两个对象,每个对象对应一种flag,与两个线程操作一个对象,对应两种flag,效果相同。
*/
DeadClock d1 = new DeadClock(true);
DeadClock d2 = new DeadClock(false);
Thread t1 = new Thread(d1);
Thread t2 = new Thread(d2);
t1.start();
t2.start();
}
}