- 21
- 0
题目描述
这段代码是可以执行的,但是我删除static Object o1 = new Object(), o2 = new Object();前面的static,死锁问题就没了,求解答?
相关代码
public class TestDeadLock implements Runnable {
int flag = 1;
static Object o1 = new Object(), o2 = new Object();
public static void main(String[] args) {
TestDeadLock tdl1 = new TestDeadLock();
TestDeadLock tdl2 = new TestDeadLock();
tdl1.flag = 0;
tdl2.flag = 1;
Thread t1 = new Thread(tdl1);
Thread t2 = new Thread(tdl2);
t1.start();
t2.start();
}
@Override
public void run() {
System.out.println("flag:" + flag);
if (flag == 0) {
synchronized (o1) {
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
synchronized (o2) {
System.out.println("0");
}
}
}
if (flag == 1) {
synchronized (o2) {
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
synchronized (o1) {
System.out.println("1");
}
}
}
}
} 0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
和寂寞相愛り 普通会员 1楼
死锁是指两个或多个进程相互等待对方释放资源的情况。当两个或多个进程同时进入一种资源的临界区,且都希望得到该资源,那么就会发生死锁。删除static并不会解决死锁问题。
死锁问题的产生原因有多种,包括资源不均匀分配、资源竞争和死锁检测算法错误等。删除static不会改变资源的分配,因此不会改变导致死锁的原因。
例如,如果A进程等待B进程释放资源,而B进程也等待A进程释放资源,那么就会发生死锁。而如果A进程删除static,那么它不再需要等待B进程释放资源,因此A进程就可以直接释放资源,避免了死锁。
总的来说,删除static并不会解决死锁问题,因为死锁问题的发生是由资源不均匀分配、资源竞争和死锁检测算法错误等多种原因引起的。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
