您的位置:首页 > 其它

多线程死锁例子

2017-05-17 18:01 344 查看
package nyx;

public class Nyx implements Runnable{
private int flag;
private Object key1;
private Object key2;

public Nyx(int flag, Object key1, Object key2) {
super();
this.flag = flag;
this.key1 = key1;
this.key2 = key2;
}

public static void main(String[] args){
System.out.println("测试开始!");
Object key1 = new Object();
Object key2 = new Object();
Nyx t1 = new Nyx(1, key1, key2);
Nyx t2 = new Nyx(2, key1, key2);
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t2);
thread1.start();
thread2.start();
System.out.println("测试结束!");
}

public void t1(){
synchronized(key1){
System.out.println("锁住了key1。。");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(key2){
System.out.println("获取了key2。。");
}
}
}
public void t2(){
synchronized(key2){
System.out.println("锁住了key2。。");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(key1){
System.out.println("获取了key1。。");
}
}
}

@Override
public void run() {
if(flag == 1){
t1();
}else{
t2();
}
}
}


两个线程,相互等待对方持有资源,只有获取对方的资源才能完成线程任务。。死锁发生以后,两个线程均处于锁定状态。。

典型问题: 哲学家问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: