simpleobjectfifo.java

来自「用java线程演示的先进先出算法的程序」· Java 代码 · 共 79 行

JAVA
79
字号
//import

public  class SimpleObjectFIFO extends Object{
  private Object[]queue;
  private int capacity;
  private  int  size;
  private  int head;
  private int tail;

  public SimpleObjectFIFO (int cap){
    capacity=(cap>0)? cap:1;
    queue=new Object[capacity];
    head=0;
    tail=0;
    size=0;
  }

  public synchronized int getSize(){
    return size;
  }

  public synchronized boolean isFull(){
    return(size==capacity);
  }

  public synchronized void add(Object obj)
      throws InterruptedException{
    while (isFull()){
      wait();
    }

    queue[head]=obj;
    head=(head+1)%capacity;
    size++;

    notifyAll();
  }

  public synchronized Object remove()
      throws InterruptedException{
    while (size==0){
      wait();
    }

    Object obj=queue[tail];
    queue[tail]=null;
    tail=(tail+1)%capacity;
    size--;

    notifyAll();

    return obj;
  }

  public synchronized void printState(){
    StringBuffer sb=new StringBuffer();
    sb.append("fifo:\n");
    sb.append("capacity="+capacity+"\n");

    sb.append("size=" + size);
    if(isFull()){
      sb.append("FULL");
    }else if (size==0){
      sb.append(" - EMPTY");
    }
    sb.append("\n");

    sb.append("head="+head+"\n");
    sb.append("tail="+tail+"\n");

    for(int i=0;i<queue.length;i++){
      sb.append("queue["+i+"]="+queue[i]+"\n");
    }

    System.out.print(sb);
    }
  }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?