//编写个死锁的例子,同步函数/同步代码块嵌套容易导致死锁
//synchronized的锁不一样,有可能线程之间和谐相处,也有可能造成线程死锁
//同步代码块的锁是对象
//非静态同步函数的锁是this
//静态同步函数的锁是该类字节码文件对象 类名.class
//如果是位于静态同步函数中的同步代码块,要想安全的话,其锁应该随着静态同步函数的锁,即也是该类字节码文件对象 类名.class
class ThreadTest implements Runnable
{
private int num=100;
private boolean flag;
ThreadTest(boolean flag)
{
this.flag=flag;
}
public void run()
{
if(flag)
{
while(true)
//for(int i=1;i<100;++i)
{
synchronized(MyLock.lockA)//此段中的锁要一致才能正确执行循环
{
System.out.println("if lockA!");
synchronized(MyLock.lockB)
{
System.out.println("if lockB!");
}
}
}
}
else
{
while(true)
//for(int i=1;i<100;++i)
{
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 DeathLockDemo
{
public static void main(String[] args)
{
ThreadTest p1=new ThreadTest(true);
ThreadTest p2=new ThreadTest(false);
Thread t1=new Thread(p1);
Thread t2=new Thread(p2);
t1.start();
//try{Thread.sleep(100);}catch(Exception e){}//暂停的话,只执行上面的语句,下面的语句等时间过后再执行
t2.start();
}
}
JAVA多线程死锁
最新推荐文章于 2024-08-05 13:14:43 发布