⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpleobjectfifo.java

📁 java多线程编程实例_Source
💻 JAVA
字号:
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; // at least 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(); // let any waiting threads know about change
	}

	public synchronized Object remove() throws InterruptedException {
		while ( size == 0 ) {
			wait();
		}
		
		Object obj = queue[tail];
		queue[tail] = null; // don't block GC by keeping unnecessary reference
		tail = ( tail + 1 ) % capacity;
		size--;

		notifyAll(); // let any waiting threads know about change

		return obj;
	}

	public synchronized void printState() {
		StringBuffer sb = new StringBuffer();

		sb.append("SimpleObjectFIFO:\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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -