class Producer implements Runnable
{
Q q;
public Producer(Q q)
{
this.q=q;
}
public void run()
{
int i=0;
while(true)
{
if (i==0)
{
q.put("zhangsan", "male");
}
else
{
q.put("lisi", "female");
}
i=(i+1)%2;
}
}
}
class Consumer implements Runnable
{
Q q;
public Consumer(Q q)
{
this.q=q;
}
public void run()
{
while(true)
{
q.get();
}
}
}
class Q
{
String name="unknown";
String sex="unknown";
boolean bFull=false;//语句1
public synchronized void put(String name,String sex)
{
if(bFull)//语句2
try{wait();} catch(Exception e){}
this.name=name;
this.sex=sex;
bFull=true;
notify();
}
public synchronized void get()
{
if(!bFull)//语句3
try{wait();} catch(Exception e){}
System.out.print(name);
System.out.println(":"+sex);
bFull=false;
notify();
}
}
class Tongxin
{
public static void main(String [] args)
{
Q q=new Q();
new Thread(new Producer(q)).start();
new Thread(new Consumer(q)).start();
}
}
语句1 改成bFull=true; 输出的结果还是一样的为什么?
语句2 和 语句3 到底是什么意思?
我原来是这么理解的:bFull=true时 缓冲区里面已经有内容 所以Consumer 这样判断 if(!bFull) wait(因为!bFull指false 这时缓冲区里面为空)
解决方案 »
- 关于java和Access的问题
- 问个getHeader()的问题?
- (菜)cmd命令如何把Myapplication.java(我编写的java程序)转成exe文件啊?
- 与其他语言相比,JAVA除了跨平台,还有优点吗?
- 学Java怎么下手?怎么生成可执行文件?
- 第一次用Java(以前用VC),問個簡單的問題;
- 我没有分了,帮帮我吧。。。。。!
- java 的简单问题 7 ???
- 对于一个给定ResultSet,如何能求得它提取数据的表的名称??
- 在英文NT下面,如何显示中文字符么?
- 帮忙介绍一些比较好的java变成环境?
- java堆栈存储问题不明白,不知如何分析下面的程序,希望给出详细分析过程,谢谢!
楼主【kinghukyoun】截止到2008-07-16 09:21:55的历史汇总数据(不包括此帖):
发帖的总数量:3 发帖的总分数:90 每贴平均分数:30
回帖的总数量:8 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:3 结贴的总分数:90
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
语句2的意思是如果bFull为true时等待,也就是等待get
提示:可能你看到的结果时,最上面的已经被覆盖,运行完马上点停止运行,则可看到unknown:unknown结果