java多线程之死锁
死锁的四个条件 1.有至少一个资源不能共享 2.至少有一个任务必须持有一个资源并且等待获取另一个被别的任务持有的资源 3.资源不能任务抢占 4.必须有循环等待
代码:
/**
*@author:StormMaybin
*@Date:2016-05-15
*@<description>死锁</description>
*/
class Test implements Runnable
{
private boolean flag;
Test(boolean flag)
{
this .flag = flag;
}
public void run ()
{
if (flag)
{
synchronized (Mylock.locka)
{
System.out.println ("if locka" );
synchronized (Mylock.lockb)
{
System.out.println ("if lockb" );
}
}
}
else
{
synchronized (Mylock.lockb)
{
System.out.println ("else lockb" );
synchronized (Mylock.locka)
{
System.out.println ("else locka" );
}
}
}
}
}
class Mylock
{
static Object locka = new Object ();
static Object lockb = new Object ();
}
class DeadLockTest
{
public static void main (String[] args)
{
Thread t1 = new Thread(new Test (true ));
Thread t2 = new Thread(new Test (false ));
t1.start();
t2.start();
}
}