黑马程序员技术交流社区
标题:
最简单的死锁是不是这样(我理解)
[打印本页]
作者:
Solomon
时间:
2014-6-9 17:45
标题:
最简单的死锁是不是这样(我理解)
锁1{ 锁2{ } }
锁2{ 锁1{ } }
作者:
朱晓盼
时间:
2014-6-9 17:54
同步内嵌套同步就会产生死锁的情况
作者:
123_yaya
时间:
2014-6-9 18:48
差不多,但并不是一定会出现死锁,加个while(true)的话就一定会出现死锁了。。
作者:
18353665932
时间:
2014-6-9 19:00
class Test implements Runnable
{
private boolean flag;
Test(boolean flag)
{
this.flag = flag;
}
public void run()
{
if(flag){
while(true){
synchronized(Mylock.locka)
{
System.out.println("if.....");
synchronized(Mylock.lockb)
{
System.out.println("if.....");
}
}
}
}
else
{
while(true){
synchronized(Mylock.lockb)
{
System.out.println("else....");
synchronized(Mylock.locka)
{
System.out.println("else.....");
}
}
}
}
}
}
public Mylock
{
public static Object locka = new Object();
public static Object lockb = new Object();
}
class DeadLockTest
{
public static void main(String[] args)
{
Test a = new Test(true);
Test b = new Test(false);
Thread t1 = new Thread(a);
Thread t2 = new Thread(b);
t1.start();
t2.start();
}
}
复制代码
代码如上,如果仅仅是嵌套有时候锁不上,需要加上while(true),就一定能锁上了,这个算是比较简单的锁了!
作者:
曲佳奇
时间:
2014-6-9 19:17
产生死锁的原因主要有:
1、临界资源使用的互斥性
一个资源每次只能给一个进程使用
2、部分地分配资源.
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)
3、资源的循环等待.
存在一个进程等待队列 {P1 , P2 , … , Pn},其中P1等待P2占有的资源,P2等待P3占有的资源…Pn等待P1占有的资源,形成一个进程等待环路
4、资源的不可抢占性等.
资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
说是原因,也可以称为前提... 4条都满足才会发生死锁
作者:
花花拉拉
时间:
2014-6-9 19:18
看了楼上的解释我也明白了
作者:
赵文豪
时间:
2014-6-9 21:11
感谢楼上解析,受教了哈
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2