演练代码如下:
class Lock implements Runnable
{
//定义一个判断标记
private boolean flag;
//通过构造函数给判断标记赋值
Lock(boolean flag)
{
this.flag = flag;
}
//定义两个静态对象,用作锁对象
static Object locka = new Object();
static Object lockb = new Object();
//复写run方法
public void run()
{
if(flag)
{
while(true)
{
//定义嵌套锁并打印结果
synchronized(locka)
{
System.out.println(Thread.currentThread().getName()+"...if locka ");
synchronized(lockb)
{
System.out.println(Thread.currentThread().getName()+"..if lockb");
}
}
}
}
else
{
while(true)
{
//定义嵌套锁并打印结果
synchronized(lockb)
{
System.out.println(Thread.currentThread().getName()+"..else lockb");
synchronized(locka)
{
System.out.println(Thread.currentThread().getName()+".....else locka");
}
}
}
}
}
}
public class Test
{
public static void main(String[] args)
{
//定义两个线程
Thread t1 = new Thread(new Lock(true),"我是线程一");
Thread t2 = new Thread(new Lock(false),"我是线程二");
//开启两个线程
t1.start();
t2.start();
}
}
通过此代码演练,可以让我们知道死锁是怎么形成的,避免后续的程序设计中犯相同的错误
|
|