當線程需要兩個鎖oa ob來完成線程任務時俏让,一個線程用oa鎖時楞遏,cpu切到另外一個線程,該線成用ob鎖首昔,第一個線程就無法使用ob鎖了寡喝,也就無法完成任務,導致死鎖現(xiàn)象沙廉。
class ShowKou implements Runnable {
private Object oa = new Object();//定義兩個鎖(對象)拘荡。
private Object ob = new Object();
boolean flag = true;
public void run() {
if (flag) {
synchronized (oa) {
System.out.println(Thread.currentThread().getName() + "---oa");
}
synchronized (ob) {
System.out.println(Thread.currentThread().getName() + "---ob");
}
} else {
synchronized (ob) {
System.out.println(Thread.currentThread().getName() + "---ob");
}
synchronized (oa) {
System.out.println(Thread.currentThread().getName() + "---oa");
}
}
}
}
class Demo1 {
public static void main(String[] args) {
ShowKou s = new ShowKou();
Thread t = new Thread(s);
Thread t2 = new Thread(s);
t.start();
s.flag = false;
t2.start();
}
}