您的位置:首页 > 编程语言 > Java开发

Java基础----一个死锁问题

2014-12-30 14:37 239 查看
package cn.itcast_02;

public class MyLock {
// 创建两把锁对象
public static final Object objA = new Object();
public static final Object objB = new Object();
}


package cn.itcast_02;

public class DieLock extends Thread {

private boolean flag;

public DieLock(boolean flag) {
this.flag = flag;
}

@Override
public void run() {
if (flag) {
synchronized (MyLock.objA) {
System.out.println("if objA");
synchronized (MyLock.objB) {
System.out.println("if objB");
}
}
} else {
synchronized (MyLock.objB) {
System.out.println("else objB");
synchronized (MyLock.objA) {
System.out.println("else objA");
}
}
}
}
}


package cn.itcast_02;

/*
* 同步的弊端:
* 		A:效率低
* 		B:容易产生死锁
*
* 死锁:
* 		两个或两个以上的线程在争夺资源的过程中,发生的一种相互等待的现象。
*
* 举例:
* 		中国人,美国人吃饭案例。
* 		正常情况:
* 			中国人:筷子两支
* 			美国人:刀和叉
* 		现在:
* 			中国人:筷子1支,刀一把
* 			美国人:筷子1支,叉一把
*/
public class DieLockDemo {
public static void main(String[] args) {
DieLock dl1 = new DieLock(true);
DieLock dl2 = new DieLock(false);

dl1.start();
dl2.start();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐