死锁
来源:互联网 发布:新媒体软件 编辑:程序博客网 时间:2024/06/10 04:23
死锁现象:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期的阻塞,因此程序不可能正常终止。
死锁产生的四个必要条件:
1.互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用。
2.不可抢占,资源请求者不能强制从资源占有者中夺取资源,资源只能由占有者主动释放。
3.请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。
4.循环等待,即存在一个等待队列:p1占有p2的资源,p2占有p3的资源,p3占有p1的资源这样就形成了一个等待环路。
当上述四个条件都成立的时候,便形成死锁。当然,死锁的情况下如果打破上述任何一个条件,便可让死锁消失。
一般什么时候出现死锁?
同步中嵌套同步。
class Test implements Runnable{private boolean flag;Test(boolean flag){this.flag = flag;}public void run(){if(flag){synchronized(MyLock.locka){System.out.println("if Locka");synchronized(MyLock.lockb)//持有a锁之后需要申请b锁{System.out.println("if lockb");}}}else{synchronized(MyLock.lockb){System.out.println("else lockb");synchronized(MyLock.locka)//持有b锁之后需要申请a锁{System.out.println("else locka");}}}}}class MyLock{static Object locka = new Object();static Object lockb = new Object();}class DeadLockTest{public static void main(String[] args){Thread t1 = new Thread(new Test(true));Thread t2 = new Thread(new Test(false));t1.start();t2.start();}}
0 0
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 黑马程序员--java基础--异常(一)
- zoj3872
- ThinkPHP的自定义常量和系统常量的使用
- 枚举
- Linux下访问Windows硬盘分区
- 死锁
- win7安装密钥
- tar.bz2怎么安装,tar.gz怎么安装
- Android简单的天气预报
- 黑马程序员--java基础--异常(二)
- What Doesn't Seem Like Work? -- Paul Graham
- DataTables插件分页
- MFC invalidate FALSE和TRUE的区别
- linux安装软件详细解答 rpm tar.gz tar.z tar.bz2 tar.tgz .deb .bin