多线程出现死锁的原理是什么样的呀!能写个列子吗?感谢!
3条回答 默认 最新
- iteye_11009 2014-07-18 00:32关注
发生死锁的原因一般是两个对象的锁相互等待造成的。
那么为什么会产生死锁呢?
1.因为系统资源不足。
2.进程运行推进的顺序不合适。
3.资源分配不当。学过操作系统的朋友都知道:产生死锁的条件有四个:
1.互斥条件:所谓互斥就是进程在某一时间内独占资源。
2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3.不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。package cn.com.wangxiuwei.test;
public class TestThread implements Runnable {
private int istrue = 1;
private Object obj1 = new Object();
private Object obj2 = new Object();public void run() { if (istrue == 1) { synchronized (obj1) { System.out.println("我已经锁定obj1,休息0.5秒后锁定obj2去!"); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj2) { System.out.println("1"); } } } if (istrue == 0) { synchronized (obj2) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj1) { System.out.println("0"); } } } } public static void main(String[] args) { TestThread testThread1= new TestThread(); TestThread testThread2 = new TestThread(); testThread1.istrue = 1; testThread2.istrue = 0; Thread thread1 = new Thread(testThread1); Thread thread2 = new Thread(testThread2); System.out.println("线程开始!"); thread1 .start(); thread2 .start(); }
}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器