workqueue.java
来自「Effective Java 中文版 侯捷译配套代码」· Java 代码 · 共 42 行
JAVA
42 行
// HORRIBLE PROGRAM - uses busy-wait instead of Object.wait! - Page 204
import java.util.*;
public abstract class WorkQueue {
private final List queue = new LinkedList();
private boolean stopped = false;
protected WorkQueue() { new WorkerThread().start(); }
public final void enqueue(Object workItem) {
synchronized (queue) { queue.add(workItem); }
}
public final void stop() {
synchronized (queue) { stopped = true; }
}
protected abstract void processItem(Object workItem)
throws InterruptedException;
private class WorkerThread extends Thread {
public void run() {
final Object QUEUE_IS_EMPTY = new Object();
while (true) { // Main loop
Object workItem = QUEUE_IS_EMPTY;
synchronized (queue) {
if (stopped)
return;
if (!queue.isEmpty())
workItem = queue.remove(0);
}
if (workItem != QUEUE_IS_EMPTY) {
try {
processItem(workItem);
} catch (InterruptedException e) {
return;
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?