死锁
->不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁
->出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续
举例:
/**
* @description 演示线程的死锁问题
*
* 以下代码会出现死锁:线程1拿到锁s1之后睡眠100ms,这时线程2拿到锁s2之后睡眠100ms。等他们醒的时候线程1等着拿锁s2,线程2等着拿锁s1
* 而这两把锁在对方的手中,这时就僵持住了,因此出现死锁,两个线程都在阻塞,不能进入死亡状态
*
*/
public class SiSuo436 {
public static void main(String[] args) {
StringBuffer s1=new StringBuffer();
StringBuffer s2=new StringBuffer();
//匿名子类对象继承Thread类来新建一个线程
new Thread(){
@Override
public void run() {
synchronized (s1){
s1.append("a");
s2.append("1");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
synchronized (s2){
s1.append("b");
s2.append("2");
System.out.println(s1);
System.out.println(s2);
}
}
}
}.start();
//匿名实现Runnable类对象传入到匿名Thread子类对象中来新建一个线程
new Thread(new Runnable() {
@Override
public void run() {
synchronized (s2){
s1.append("c");
s2.append("3");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
synchronized (s1){
s1.append("d");
s2.append("4");
System.out.println(s1);
System.out.println(s2);
}
}
}
}).start();
}
}
我们使用同步时要避免出现死锁
如:1.专门的算法
2.尽量减少同步资源的定义
3.尽量避免嵌套同步
4万+

被折叠的 条评论
为什么被折叠?



