首页 > 代码库 > 一个简单的死锁例子
一个简单的死锁例子
/**
* 一个简单的死锁类
* 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒
* 而td1在睡眠的时候另一个flag==0的对象(td2)线程启动,先锁定o2,睡眠500毫秒
* td1睡眠结束后需要锁定o2才能继续执行,而此时o2已被td2锁定;
* td2睡眠结束后需要锁定o1才能继续执行,而此时o1已被td1锁定;
* td1、td2相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。
*/
public
class
DeadLock
implements
Runnable {
public
int
flag =
1
;
//静态对象是类的所有对象共享的
private
static
Object o1 =
new
Object(), o2 =
new
Object();
@Override
public
void
run() {
System.out.println(
"flag="
+ flag);
if
(flag ==
1
) {
synchronized
(o1) {
try
{
Thread.sleep(
500
);
}
catch
(Exception e) {
e.printStackTrace();
}
synchronized
(o2) {
System.out.println(
"1"
);
}
}
}
if
(flag ==
0
) {
synchronized
(o2) {
try
{
Thread.sleep(
500
);
}
catch
(Exception e) {
e.printStackTrace();
}
synchronized
(o1) {
System.out.println(
"0"
);
}
}
}
}
public
static
void
main(String[] args) {
DeadLock td1 =
new
DeadLock();
DeadLock td2 =
new
DeadLock();
td1.flag =
1
;
td2.flag =
0
;
//td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。
//td2的run()可能在td1的run()之前运行
new
Thread(td1).start();
new
Thread(td2).start();
}
}
http://www.cnblogs.com/baizhanshi/p/5437933.html
一个简单的死锁例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。