class Queue{
int value;
boolean b=false;
public synchronized void put(int i){
if(!b){
value=i;
b=true;
notify();
try{
wait();
}
catch(Exception e){
e.printStackTrace();
}
}
}
public synchronized int get(){
if(!b){
try{
wait();
}
catch(Exception e){
e.printStackTrace();
}
}
b=false;
notify();
return value;
}
}
3个类中的队列类另外2个不用写出来了,具体东西都在这呢,问题是那boolean变量
定义一个boolean b=false;判断队列是否是满的,如果是满的说明数据还没有被消费者获取,问题就是着b,为假的时候是说明是满还是没满??
如果b为假时说明是满的,那下面if(!b)就为真,说明队列里没数据没满的状态,然后value=i;付值这时应该是满的了,可是他又定义为b=true;是什么意思?
然后调用notify方法将现成从等待队列里删除也就是说明put方法里有数了,需要消费者把数拿走,然后调用wait方法等待消费者拿数,我想的没错吧??
请各位尽量帮忙说一下他那算法,实在理解不了了
各位带星星的哥哥也不要嫌弃简单啊,本人菜鸟需要你们才能成张嘎嘎
int value;
boolean b=false;
public synchronized void put(int i){
if(!b){
value=i;
b=true;
notify();
try{
wait();
}
catch(Exception e){
e.printStackTrace();
}
}
}
public synchronized int get(){
if(!b){
try{
wait();
}
catch(Exception e){
e.printStackTrace();
}
}
b=false;
notify();
return value;
}
}
3个类中的队列类另外2个不用写出来了,具体东西都在这呢,问题是那boolean变量
定义一个boolean b=false;判断队列是否是满的,如果是满的说明数据还没有被消费者获取,问题就是着b,为假的时候是说明是满还是没满??
如果b为假时说明是满的,那下面if(!b)就为真,说明队列里没数据没满的状态,然后value=i;付值这时应该是满的了,可是他又定义为b=true;是什么意思?
然后调用notify方法将现成从等待队列里删除也就是说明put方法里有数了,需要消费者把数拿走,然后调用wait方法等待消费者拿数,我想的没错吧??
请各位尽量帮忙说一下他那算法,实在理解不了了
各位带星星的哥哥也不要嫌弃简单啊,本人菜鸟需要你们才能成张嘎嘎
解决方案 »
- log4j的多线程写文件问题
- JXL读取EXCEL里日期格式写入数据库的问题
- 一道简单的题
- 哪位大侠解释一下jre,java plug-in以及jvm之间的关系
- 求下图的界面如何用程序实现?
- 使用java.text.DecimalFormat类,如何将类似 1,234,567.1 数字转化成 1234567.1呢?
- Hibernate left join fetch 关联查询问题
- 请教JAVA中链表的原理
- 字符串的问题?
- jTree 刷新问题!
- 测试BufferedInputStream的mark()和reset()方法,提交文件时会出现Resetting to invalid mark
- 关于JTable显示数据的问题!顶者有分!
b=false表示队列不满。b=true表示队列满了
他的队列只有一个数据,就是valueput函数,如果队列不满的话,就加入i,同时队列设置为满,并通知get来取,然后等待get唤醒。
get函数,如果队列不满的话,就wait()直到被put唤醒,否则队列设置为满,并取出value。