ActiveObject Pattern

目录

AbstractActiveObject

Request

Result

FutureResult

SchedulerThread


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("任务队列已满,新任务被抛弃");
        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值