您的位置:首页 > 运维架构 > 反向代理

squid 反向代理

2014-05-19 09:43 155 查看
public class DeadLock implements Runnable {
private boolean flag;
static Object o1 = new Object(), o2 = new Object();
public void run() {
System.out.println(flag);
if (flag) {
synchronized (o1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
System.out.println("AAA");
}
}
} else {
synchronized (o2) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1) {
System.out.println("BBB");
}
}
}
}
public static void main(String[] args) {
DeadLock aaa = new DeadLock();
DeadLock bbb = new DeadLock();
aaa.flag = true;
bbb.flag = false;
Thread thA = new Thread(aaa);
Thread thB = new Thread(bbb);
thA.start();
thB.start();
}
}
以上是java死锁代码,首先创建一个类DeadLock,要实现多线程就必须让这个对象(DeadLock)继承Thread类或者实现接口Runnable,这里是实现了Runnable接口,然后建立一个boolean类型的变量flag,再建立两个 object类型的成员变量,然后重写run()方法,在run方法中输出变量flag的值,在用if进行判断,如果为真,就让他用synchronized关键字把o1对象给锁定,然后让他休息0.5秒,醒来后继续执行下面的代码,这时候程序就无法执行下去了。
首先执行main方法,实例了两个对象后,给各自的变量flag赋值后,当执行thA.start()后run执行方法,他的flag为true所以执行if里的句子锁定o1,执行到Thread.sleep(500)后,第二个线程开始运行,执行else里的语句锁定o2对象,当他也执行到Thread.sleep(500)以后,第一个线程就启动了,继续执行,可是o2对象被锁了,无法执行只能等锁的释放,所以第二个线程可能就开始执行了,可是o1对象被锁了,也只能等待谁都不肯释放彼此要的对象所以就有了死锁,程序无法继续执行了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: