Back to Hippo4j

内置拒绝策略

docs/versioned_docs/version-1.5.0/user_docs/dev_manual/rejected-policy-info.md

1.5.01.2 KB
Original Source

内置拒绝策略

内置两种拒绝策略说明:

RunsOldestTaskPolicy:添加新任务并由主线程运行最早的任务。

java
public class RunsOldestTaskPolicy implements RejectedExecutionHandler {

    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        if (executor.isShutdown()) {
            return;
        }
        BlockingQueue<Runnable> workQueue = executor.getQueue();
        Runnable firstWork = workQueue.poll();
        boolean newTaskAdd = workQueue.offer(r);
        if (firstWork != null) {
            firstWork.run();
        }
        if (!newTaskAdd) {
            executor.execute(r);
        }
    }
}

SyncPutQueuePolicy:主线程把拒绝任务以阻塞的方式添加到队列。

java
@Slf4j
public class SyncPutQueuePolicy implements RejectedExecutionHandler {

    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        if (executor.isShutdown()) {
            return;
        }
        try {
            executor.getQueue().put(r);
        } catch (InterruptedException e) {
            log.error("Adding Queue task to thread pool failed.", e);
        }
    }
}