首先我们要理解什么是死锁,简单来说就是相互持有对方的锁
死锁问题概述
如果出现了同步嵌套,就容易产生死锁问题
是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待现象
死锁:
两个或者两个以上的线程, 在抢占CPU的执行权的时候, 都处于等待状态
举例:
中国人和美国人一起吃饭
中国人使用的筷子
美国人使用的刀和叉
中国人获取到了美国人的刀
美国人获取到了中国人的一根筷子
这个时候中国人和美国人都不能继续进行吃饭的操作
同步代块实现简单的死锁现象
//先创建两把锁:
public interface Lock {
//创建两把锁
public static final Object objA = new Object();
Object objB = new Object();
}
// 线程
public class MyThread1 extends Thread {
//
boolean flag = true;
public MyThread1(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
//这里就是锁套锁的现象
if (flag) {
synchronized (Lock.objA) {
System.out.println("true==objA锁进来了");
synchronized (Lock.objB) {
System.out.println("true==objB锁进来了");
}
}
} else {
synchronized (Lock.objB) {
System.out.println("true==objB锁进来了");
synchronized (Lock.objA) {
System.out.println("true==objA锁进来了");
}
}
}
}
}
//开启线程
public class Mytest {
public static void main(String[] args) {
MyThread1 th1 = new MyThread1(true);
MyThread1 th2 = new MyThread1(false);
th1.start();
th2.start();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14633.html