public class DeadLock {
//创建两个对象,一个线程持有锁A并且申请获得锁B,而另一个线程持有锁B并且申请获得锁A就会发生死锁。
private static final Object A=new Object();
private static final Object B=new Object();
public static void main(String[] args){
new Thread(){
public void run(){
synchronized(A){
try {
Thread.sleep(50);//如果没有这句话会因为程序执行太快而观察不到死锁现象
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (B){
System.out.println("拿到A的锁并且拿到B的锁");
}
}
}
}.start();
new Thread(){
public void run(){
synchronized(B){
synchronized (A){
System.out.println("拿到B的锁并且拿到A的锁");
}
}
}
}.start();
}
}
使用lambda表达式改进一下(代码简洁):
new Thread(()->{
synchronized(A){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (B){
System.out.println("拿到B的锁并且拿到A的锁");
}
}
}).start();
new Thread(()->{
synchronized(B) {
synchronized (A) {
System.out.println("拿到B的锁并且拿到A的锁");
}
}
}).start();
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- esig.cn 版权所有 湘ICP备2023023988号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务