* 死锁
* 出现原因:
* 1. 存在多个线程;
* 2. 存在两个或是两个以上的共享资源;
*
* 死锁的解决方案: 没有解决办法,只能尽量避免发生(从设计上避免出现死锁的产生条件);
*/
class DeadLock extends Thread
{
public DeadLock(String name)
{
super(name);
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
if("张三儿".equals(Thread.currentThread().getName())){
synchronized("遥控器"){
System.out.println("张三拿到了遥控器,准备拿电池");
synchronized("电池"){
System.out.println("张三拿到了电池,接着按了遥控器打开了空调");
}
}
}
else if("李四儿".equals(Thread.currentThread().getName())){
synchronized("电池"){
System.out.println("李四儿拿到了电池,准备去拿药遥控器");
synchronized("遥控器"){
System.out.println("李四拿到了遥控器,接着装上电池,打开了空调");
}
}
}
}
}
public class Demo4 {
public static void main(String[] args) {
DeadLock zhangsan = new DeadLock("张三儿");
DeadLock lisi = new DeadLock("李四儿");
zhangsan.start();
lisi.start();
}
}
运行结果:
说明:死锁不一定发生,但是有发生的条件存在就有发生的可能性;