当线程需要两个锁oa ob来完成线程任务时,一个线程用oa锁时,cpu切到另外一个线程,该线成用ob锁,第一个线程就无法使用ob锁了,也就无法完成任务,导致死锁现象。
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();
}
}