------- android培训、java培训、期待与您交流! ---------
两个线程在运行的时候都在等待着对方的锁,这样便造成了程序的停滞。造成程序的假死现象。这种现象称为死锁。
实际的开发中不太可能出现,但是面试的时候有很大的概率会被问到死锁的问题。代码如下。
<span style="font-size:14px;">package cn.itcast.thread;
/*
* 死锁的案例
*/
class Dead implements Runnable{
private boolean flag;
Dead(boolean flag){this.flag = flag;}
public void run(){
while(true){
//如果flag = true线程进入A同步代码块,进B同步代码块
if(flag){
synchronized(LockA.locka){
System.out.println("if..locka");
//进B同步代码块
synchronized(LockB.lockb){
System.out.println("if..lockb");
}
}
}else{
//如果flag = false 线程进入B同步代码块,进入A同步代码块
synchronized(LockB.lockb){
System.out.println("else..lockb");
//进A同步代码块
synchronized(LockA.locka){
System.out.println("else..locka");
}
}
}
}
}
}
public class ThreadDemo5 {
public static void main(String[] args) {
Dead d1 = new Dead(true);//线程进入A代码块
Dead d2 = new Dead(false);//线程进入B代码块
Thread t1 = new Thread(d1);
Thread t2 = new Thread(d2);
t1.start();
t2.start();
}
}
//定义两个锁,A锁,B锁,唯一对象
class LockA{
public static final LockA locka = new LockA();
}
class LockB{
public static final LockB lockb = new LockB();
}</span>
------- android培训、java培训、期待与您交流! ---------