黑马程序员技术交流社区
标题:
死锁问题
[打印本页]
作者:
奋斗的小胖子
时间:
2014-2-11 19:52
标题:
死锁问题
本帖最后由 奋斗的小胖子 于 2014-2-11 20:26 编辑
我自己写了个死锁代码,发现线程调用的时候用run锁不上,用start才锁得什么?怎么回事?
/*建立一个死锁范例
* 需求分析:1,首先要有多个线程
* 2,应该有两个方法,分别互相嵌套加锁
* 3,建立两把锁
* */
class synchronizedDemo
{
public static void main(String[] args)
{
DeadDemo d1=new DeadDemo(true);
DeadDemo d2=new DeadDemo(false);
Thread t1=new Thread(d1);
Thread t2=new Thread(d2);
// t1.start();
// t2.start();
t1.run();
t2.run();
}
}
class DeadDemo implements Runnable
{
//这里的flag要确保两个线程走不同的方法
private boolean flag;
//这里输入的不同值将确保线程访问不同的方法
DeadDemo(boolean flag)
{
this.flag=flag;
}
@Override
public void run()
{
while(true)
{
if(flag==true)
{
synchronized (Lock.lockA)
{
System.out.println("if------lockA");
synchronized (Lock.lockB)
{
System.out.println("if------lockB");
}
}
}
else
{
synchronized (Lock.lockB)
{
System.out.println("else------lockB");
synchronized (Lock.lockA)
{
System.out.println("else------lockA");
}
}
}
}
}
}
//建立两把锁
class Lock
{
public static Lock lockA=new Lock();
public static Lock lockB=new Lock();
}
复制代码
作者:
何苦似梦离
时间:
2014-2-11 19:58
大哥,run表示调用函数,start表示启动一个线程调用函数,现在明白了吗
作者:
奋斗的小胖子
时间:
2014-2-11 20:18
何苦似梦离 发表于 2014-2-11 19:58
大哥,run表示调用函数,start表示启动一个线程调用函数,现在明白了吗
就这么简单?
作者:
程澄
时间:
2014-2-11 20:23
你可以查API,看Thread类中这两个方法的具体说明
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2