标题:生产者、消费者问题
只看楼主
开心一科
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-10-5
 问题点数:0 回复次数:12 
生产者、消费者问题

帮忙看一下,为什么有的地方,结果也打印出来了是先消费后生产呢,谢谢!
class Queue
{
boolean available = false;
int value;
public synchronized void setValue(int value)
{
if (!available)
{
this.value = value;
available = true;
notify();
}
//数据还没有取走则等待
try
{
wait();
}
catch (Exception e)
{
e.printStackTrace();
}
}

public synchronized int getValue()
{
if (!available)//没有准备好就等待
{
try
{
wait();
}
catch (Exception e)
{
e.printStackTrace();
}
}
//准备好了数据返回该数据
available = false;
notify();
return value;
}
}
class producer extends Thread
{
Queue q;
producer(Queue q)
{
this .q= q ;
}
public void run ()
{
for (int i = 0; i<10; i++)//共放了十个数据
{
q.setValue(i);
System.out.println("producer:"+i);
}
}
}
class consumer extends Thread
{
Queue q ;
consumer(Queue q)
{
this.q = q;
}
public void run ()
{
while (true )
{
System.out.println("consumer:"+q.getValue());
}
}
}

public class sychronizedThread
{
public static void main(String[] args)
{
Queue q = new Queue();
producer pro = new producer(q); //实例化两个线程
consumer con = new consumer(q);
pro.start();
con.start();
}

}

搜索更多相关主题的帖子: 消费者 生产者 value available int 
2006-11-28 10:43
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
怎么会呢

可惜不是你,陪我到最后
2006-11-28 12:34
开心一科
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-10-5
得分:0 
是这样的哦
很奇怪,不知道那的错误哦!

2006-11-28 12:39
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
那是你放错位置了
q.setValue(i);
System.out.println("producer:"+i);
把这两句调换一下就可以了

可惜不是你,陪我到最后
2006-11-28 12:44
开心一科
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-10-5
得分:0 
换了后还是有点问题阿
并不是产生一个,接着消费掉这个数据阿

2006-11-28 12:56
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

并是因为这个,而是因为线程起动的问题


可惜不是你,陪我到最后
2006-11-28 13:00
しΟν∈→鱈
Rank: 1
等 级:新手上路
威 望:2
帖 子:369
专家分:0
注 册:2006-10-25
得分:0 

线程  看了N多的例子  越看越糊涂


开开心心的过&玩每一天!!!!
2006-11-28 14:22
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
越糊涂越要看

可惜不是你,陪我到最后
2006-11-28 14:54
开心一科
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-10-5
得分:0 
到底怎样启动线程,才能输出正确嘛!

2006-11-28 16:42
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

我这里一直都是正确的啊


可惜不是你,陪我到最后
2006-11-28 16:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-105833-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.394207 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved