一、死锁
线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。
什么情况下会产生死锁
- 资源有限
- 同步嵌套
public class Csdn {
public static void main(String[] args) {
Object objA = new Object();
Object objB = new Object();
new Thread(() -> {
while (true) {
synchronized (objA) {
synchronized (objB) {
System.out.println("小康同学正在走路");
}
}
}
}).start();
new Thread(() -> {
while (true) {
synchronized (objB) {
synchronized (objA) {
System.out.println("小薇同学正在走路");
}
}
}
}).start();
}
}
死锁的解决:
- 不使用锁的嵌套,从根本上解决死锁问题。
- 当某个线程长期无法获取想要的锁的时候,让它主动释放掉手动持有的锁,让其他线程先执行,再尝试获取锁。
public class Csdn {
public static void main(String[] args) {
Object objA = new Object();
Object objB = new Object();
Object objC = new Object();
new Thread(() -> {
while (true) {
synchronized (objC) {
synchronized (objB) {
System.out.println("小康同学正在走路");
}
}