java产生死锁原因,代码如下。

packagedemo;classResource2{privateStringname;privateintcount=1;privatebooleanflag=fal... package demo;
class Resource2 {
private String name;
private int count = 1;
private boolean flag = false;

public synchronized void set(String name) {
if (flag)
try {
wait();
} catch (InterruptedException e) {
System.out.println(e);
}

this.name = name;

count++;
flag = true;
notify();
}
public synchronized void out() {
if (flag)
try {
wait();
} catch (InterruptedException e) {
System.out.println(e);
}
System.out.println(Thread.currentThread().getName() + "\tname:" + name);
flag = false;
notify();
}
}
class Producer implements Runnable {
private Resource2 r;
public Producer(Resource2 r) {
super();
this.r = r;
}
public void run() {
while (true) {
r.set("小苍");
}
}
}
class Consumer implements Runnable {
Resource2 r;
public Consumer(Resource2 r) {
super();
this.r = r;
}
public void run() {
while (true) {
r.out();
}
}
}
public class ProducerConsumer {
public static void main(String[] args) {
Resource2 r = new Resource2();
Producer p = new Producer(r);
Consumer c = new Consumer(r);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
展开
 我来答
百度网友1fcf34c73
2013-05-03 · TA获得超过865个赞
知道小有建树答主
回答量:400
采纳率:100%
帮助的人:456万
展开全部
你这个不是死锁,就是flag的判断有问题,每个线程都是自己把自己锁住了,当flag为true时,看以下两段代码:
public synchronized void set(String name) {
if (flag)
try {
wait();

public synchronized void out() {
if (flag)
try {
wait();

两个线程都在wait,当然卡住不动了。

看你的代码,把set那段改成这样应该就好了:
public synchronized void set(String name) {
if (!flag)
try {
wait();
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式