package com.huowolf;
/*死锁的含义:
* 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。
* 由于线程被无限期地阻塞,因此程序不能正常运行。
*
* 死锁出现的情形:同步中嵌套同步。
* 但也可能和谐
*
* 避免死锁的一个通用的经验法则是:
* 当几个线程都要访问共享资源A、B、C时,保证使每个线程都按照同样的顺序去访问它们,
* 比如都先访问A,在访问B和C。
*/
//死锁示例:
class Test implements Runnable{
private boolean flag;
public Test(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if(flag) {
while(true) {
synchronized (MyLock.locka) {
System.out.println("if locka");
synchronized (MyLock.lockb) {
System.out.println("if lockb");
}
}
}
}else {
while(true) {
synchronized (MyLock.lockb) {
System.out.println("else lockb");
synchronized (MyLock.locka) {
System.out.println("else locka");
}
}
}
}
}
}
class MyLock {
static Object locka = new Object();
static Object lockb = new Object();
}
public class DeadLockTest {
public static void main(String[] args) {
Thread t1 = new Thread(new Test(true));
Thread t2= new Thread(new Test(false));
t1.start();
t2.start();
}
}