java!操作符的问题

来源:百度知道 编辑:UC知道 时间:2024/07/05 05:05:57
/*。
boolean bFull=false; //Queue类数据为空
if (!bFull) //这里是表示数据为满吧,可是数据已经满了怎么往里面加数据?根据孙鑫讲解是
//这个队列并不是满的
{
value=i;
bFull=true;
notify();
}
try{wait();} catch{//}
那我该怎么理解这个!bFull,是有数据但没满,还是满了.
根据运行结果,是put()方法放一个休息一下,然后通知get()方法,get()方法取
完后就通知put()方法,继续放数据 */

class Testt
{
public static void main(String[] args)
{
Queue q=new Queue();
Producer p=new Producer(q);
Consumer c=new Consumer(q);
p.start();
c.start();
}
}
class Producer extends Thread
{
Queue q;
Producer(Queue q)
{
this.q=q;
}
public void run()
{
for(int i=0;i<10;i++)
{
q.put(i);
System.out.println("Producer put"+i);
}
}
}
class Consumer extends Thread
{
Queue q;
Consumer(Queue q)
{
this.q=q;
}
public void run()
{
while(true)

我没仔细看程序,应该是模拟一个队列吧?
bFull 如果为true,就代表队列满了,false就代表队列没有满,这点没有问题。
if(! bFull)
{
//注意,!是取反,bFull为true时,括号内为false,反之亦然
//那就不难理解,bFull为true,说明满了,括号内为false,if中语句不执行
//反之,bFull为false,说明没有满,括号内结果为true,所以会执行if中的代码,继续添加,没有问题啊
//你是没绕过来吧
}

class Queue{
private ArrayList list=null;
private int capacity=0;
private int position=0;
Queue(int i){
list=new ArrayList(i);
capacity=i;
position=0;
}
boolean isFull(){
if(position>=capacity) return true; //如果当前位置大于容量,那就是满
else return false;
}

int put(Object obj){
if(isFull) return -1;
list.add(obj);
position++;
return position;
}

.....