目录
AbstractActiveObject
public abstract class AbstractActiveObject {
protected final SchedulerThread schedulerThread;
public AbstractActiveObject(SchedulerThread schedulerThread) {
this.schedulerThread = schedulerThread;
}
}
Request
public abstract class Request {
protected final FutureResult futureResult;
protected final Object[] methodArgs;
public Request(FutureResult futureResult, Object...methodArgs) {
this.futureResult = futureResult;
this.methodArgs = methodArgs;
}
public abstract void execute();
}
Result
public class Result {
protected final Object value;
public Result(Object value) {
this.value = value;
}
}
FutureResult
public class FutureResult {
private Result result;
public FutureResult() {
}
public void setResult(Result result) {
this.result = result;
Thread.currentThread().notifyAll();
}
public Result getResult() throws InterruptedException {
if (result == null) {
this.wait();
}
return result;
}
}
SchedulerThread
@Slf4j
public class SchedulerThread extends Thread {
private static final BlockingQueue<Request> queue = new LinkedBlockingDeque<>();
private static final int MAX_SIZE = 100;
@Override
public void run() {
while (true) {
if (!queue.isEmpty()) {
try {
queue.take().execute();
} catch (InterruptedException e) {
log.error("执行任务出错",e);
}
}
}
}
public void put(Request request) {
if (queue.size() < MAX_SIZE) {
queue.add(request);
}else {
log.error("任务队列已满,新任务被抛弃");
}
}
}