多线程的死锁示例
/*
需求:
写一个死锁程序
思路:
同步锁的嵌套容易产生死锁
假设有两把锁A,B,死锁的产生是这样的,A锁的代码块中有B锁,B锁的代码块中有A锁
步骤:
1. 创建任务
2. 创建线程
3. 开启线程
*/
/*
锁对象封装
*/
class LockObject
{
public static final Object locka = new Object();
public static final Object lockb = new Object();
}
/*
实现runnable接口类
*/
class TestRunnable implements Runnable
{
private boolean flag;
public TestRunnable(boolean flag)
{
this.flag = flag;
}
public void run()
{
if(flag)
{
synchronized(LockObject.locka)
{
System.out.println("if....locka....");
synchronized(LockObject.lockb)
{
System.out.println("if....lockb....");
}
}
}
else
{
synchronized(LockObject.lockb)
{
System.out.println("else....lockb....");
synchronized(LockObject.locka)
{
System.out.println("else....locka....");
}
}
}
}
}
/*
死锁程序示例
*/
class DeadLock
{
public static void main(String[] args)
{
//创建任务
TestRunnable tr1 = new TestRunnable(true);
TestRunnable tr2 = new TestRunnable(false);
//创建线程
Thread t1 = new Thread(tr1);
Thread t2 = new Thread(tr2);
//开启线程
t1.start();
t2.start();
}
}