您的位置:首页 > 编程语言 > Java开发

3-4-Java多线程-案例-死锁

2016-11-20 22:29 405 查看

死锁

同步的另一个弊端:

情况之一:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。

这时容易引发一种现象:死锁。

这种情况能避免就避免掉。

//Thread-0
synchronized(obj1)
{
-->thread-0  obj1
synchronized(obj2)
{

}

}
//Thread-1
synchronized(obj2)
{
Thread-1 obj2
synchronized(obj1)
{

}

}


死锁示例

class Test implements Runnable
{
private boolean flag;
Test(boolean flag)
{
this.flag = flag;
}

public void run()
{
if(flag)
{
while(true)
{
synchronized(MyLock.LOCKA)
{
System.out.println(Thread.currentThread().getName()+"...if......locka");
synchronized(MyLock.LOCKB)
{
System.out.println(Thread.currentThread().getName()+"...if......lockb");
}
}
}
}
else
{
while(true)
{
synchronized(MyLock.LOCKB)
{
System.out.println(Thread.currentThread().getName()+"...else......lockb");
synchronized(MyLock.LOCKA)
{
System.out.println(Thread.currentThread().getName()+"...else......locka");
}
}
}
}
}
}
//定义一个用于存储锁对象类。
class MyLock
{
public static final Object LOCKA = new Object();
public static final Object LOCKB = new Object();
}

class DeadLockTest
{
public static void main(String[] args)
{
//创建两个线程任务。
Test t1 = new Test(true);
Test t2 = new Test(false);

Thread t11 = new Thread(t1);
Thread t22 = new Thread(t2);
t11.start();
t22.start();

}
}


执行结果

Thread-0if ... lock a
Thread-1else ... lock b
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程 线程