死锁
- 定义: 在多线程程序中,使用了多把锁,造成线程之间相互等待.程序不往下走了。
产生死锁的条件
1.有多把锁
2.有多个线程
3.有同步代码块嵌套
死锁代码及现象
public class Test21 {
public static void main(String[] args) {
Object obj1 = new Object();
Object obj2 = new Object();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (obj1) {
System.out.println("线程1拿到锁1,等待锁2...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2) {
System.out.println("线程1拿到锁1和锁2...");
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (obj2) {
System.out.println("线程2拿到锁2,等待锁1...");
synchronized (obj1) {
System.out.println("线程2拿到锁1和锁2...");
}
}
}
}).start();
}
}
运行结果
注意:我们在开发过程中应该尽量避免死锁