ExecutorScheduler.java 文件源码

java
阅读 23 收藏 0 点赞 0 评论 0

项目:boohee_v5.6 作者:
public Subscription schedule(final Action0 action, long delayTime, TimeUnit unit) {
    if (delayTime <= 0) {
        return schedule(action);
    }
    if (isUnsubscribed()) {
        return Subscriptions.unsubscribed();
    }
    ScheduledExecutorService service;
    if (this.executor instanceof ScheduledExecutorService) {
        service = this.executor;
    } else {
        service = GenericScheduledExecutorService.getInstance();
    }
    MultipleAssignmentSubscription first = new MultipleAssignmentSubscription();
    final MultipleAssignmentSubscription mas = new MultipleAssignmentSubscription();
    mas.set(first);
    this.tasks.add(mas);
    final Subscription removeMas = Subscriptions.create(new Action0() {
        public void call() {
            ExecutorSchedulerWorker.this.tasks.remove(mas);
        }
    });
    ScheduledAction ea = new ScheduledAction(new Action0() {
        public void call() {
            if (!mas.isUnsubscribed()) {
                Subscription s2 = ExecutorSchedulerWorker.this.schedule(action);
                mas.set(s2);
                if (s2.getClass() == ScheduledAction.class) {
                    ((ScheduledAction) s2).add(removeMas);
                }
            }
        }
    });
    first.set(ea);
    try {
        ea.add(service.schedule(ea, delayTime, unit));
        return removeMas;
    } catch (RejectedExecutionException t) {
        RxJavaPlugins.getInstance().getErrorHandler().handleError(t);
        throw t;
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号