黑马程序员技术交流社区
标题:
程序设计时如何避免死锁
[打印本页]
作者:
alax
时间:
2014-5-19 03:44
标题:
程序设计时如何避免死锁
多线程并发执行时如何避免死锁
作者:
张鹏宇
时间:
2014-5-19 12:07
同步或加群
作者:
张鹏宇
时间:
2014-5-19 12:08
张鹏宇 发表于 2014-5-19 12:07
同步或加群
加锁。。。错字。好尴尬,等一分钟才能发出去。
作者:
小小6456
时间:
2014-5-19 12:59
学习一下。。。。。。。。。。。。。。。。。
作者:
格子、
时间:
2014-5-19 16:02
张鹏宇 发表于 2014-5-19 12:07
同步或加群
哥们,同步才有的锁啊,你这说的都点矛盾哦
作者:
格子、
时间:
2014-5-19 16:17
对于死锁,我们首先明确什么是死锁,然后再避免如何遇到死锁呢。
首先死锁的前提
1. 同步嵌套
2.嵌套的同步持有不同的锁
代码示例:
class Test
{
public static void main(String[] args)
{
Thread t1 = new Thread(new Demo(true));
Thread t2 = new Thread(new Demo(false));
t1.start();
t2.start();
}
}
class Demo implements Runnable
{
private boolean flag;
Demo(boolean flag)
{
this.flag=flag;
}
public void run()
{
if(flag)
{
while(flag==true)
{
synchronized(Demo2.obja)//它的锁是obja
{
System.out.println("if-----obja");
synchronized(Demo2.objb)//它的锁是objb
{
System.out.println("if-----obja");
}
}
}
}
else
{
while(flag==false)
{
synchronized(Demo2.objb)//它的锁是objb
{
System.out.println("else-----obja");
synchronized(Demo2.obja)//它的锁是obja
{
System.out.println("else-----objb");
}
}
}
}
}
}
class Demo2
{
//定义两个锁
static Object obja = new Object();
static Object objb = new Object();
}
复制代码
这段代码就是个典型的死锁,线程在抢夺CPU的执行权的时候,就会发生你要的锁,我也想要你的锁,但是谁也不给谁,这就造成了死锁,只要把锁给变成同一把锁就哦了,所以多了就容易分不清出现死锁现象!!
作者:
张鹏宇
时间:
2014-5-19 21:28
格子、 发表于 2014-5-19 16:02
哥们,同步才有的锁啊,你这说的都点矛盾哦
就是syc 和 locked阿
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2