本帖最后由 xuemeng 于 2013-5-14 22:15 编辑
你要明白, 为什么会造成死锁?
其实造成死锁的原因就是锁嵌套, 只要锁不嵌套就没问题了E!
你上面的代码是专门一个死锁例子, 没有实际意义, 并没有要实现什么功能, 所以并不好修改, 如果你的需求是 打印 0,1 01 这样的规律的结果, 那么用线程间的通讯可以:如下代码
class Resource {
boolean b;
}
class One extends Thread {
private Resource r;
public One(Resource r) {
this.r = r;
}
public void run() {
synchronized (r) {
while (true) {
if (r.b) {
try {
r.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(0);
r.notify();
r.b = true;
}
}
}
}
class Two extends Thread {
private Resource r;
public Two(Resource r) {
this.r = r;
}
public void run() {
synchronized (r) {
while (true) {
if (!r.b) {
try {
r.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(1);
r.notify();
r.b = false;
}
}
}
}
class Demo {
public static void main(String[] args) {
Resource r = new Resource();
One o = new One(r);
Two t = new Two(r);
o.start();
t.start();
}
}
|