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

多线程死锁代码实例

2013-01-28 20:51 399 查看
package com.oyqh;

public class RunnableTest implements Runnable {
private int flag = 1;
private Object obj1 = new Object(), obj2 = new Object();

public void run() {
System.out.println("flag=" + flag);
if (flag == 1) {
synchronized (obj1) {
System.out.println("我已经锁定obj1,休息0.5秒后锁定obj2去!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2) {
System.out.println("1");
}
}
}
if (flag == 0) {
synchronized (obj2) {
System.out.println("我已经锁定obj2,休息0.5秒后锁定obj1去!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj1) {
System.out.println("0");
}
}
}
}

public static void main(String[] args) {
RunnableTest run01 = new RunnableTest();
RunnableTest run02 = new RunnableTest();
run01.flag = 1;
run02.flag = 0;
Thread thread01 = new Thread(run01);
Thread thread02 = new Thread(run02);
System.out.println("线程开始喽!");
thread01.start();
thread02.start();
}
}

上述代码实际运行时并不会产生死锁现象,若要死锁,则需要将 private Object obj1 = new Object(), obj2 = new Object(); 

改为 private static Object obj1 = new Object(), obj2 = new Object(); 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: