class EagerDtpExecutor extends DtpExecutor {

    /**
     * The number of tasks submitted but not yet finished.
     */
    private final AtomicInteger submittedTaskCount = new AtomicInteger(0);
    
    public EagerDtpExecutor(int corePoolSize,
                            int maximumPoolSize,
                            long keepAliveTime,
                            TimeUnit unit,
                            BlockingQueue<Runnable> workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
                Executors.defaultThreadFactory(), new AbortPolicy());
    }
    
    public EagerDtpExecutor(int corePoolSize,
                            int maximumPoolSize,
                            long keepAliveTime,
                            TimeUnit unit,
                            BlockingQueue<Runnable> workQueue,
                            ThreadFactory threadFactory) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
                threadFactory, new AbortPolicy());
    }
    
    public EagerDtpExecutor(int corePoolSize,
                            int maximumPoolSize,
                            long keepAliveTime,
                            TimeUnit unit,
                            BlockingQueue<Runnable> workQueue,
                            RejectedExecutionHandler handler) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
                Executors.defaultThreadFactory(), handler);
    }
    
    public EagerDtpExecutor(int corePoolSize,
                            int maximumPoolSize,
                            long keepAliveTime,
                            TimeUnit unit,
                            BlockingQueue<Runnable> workQueue,
                            ThreadFactory threadFactory,
                            RejectedExecutionHandler handler) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler);
    }

    public int getSubmittedTaskCount() {
        return submittedTaskCount.get();
    }

    @Override
    protected void afterExecute(Runnable r, Throwable t) {
        submittedTaskCount.decrementAndGet();
        super.afterExecute(r, t);
    }

    @Override
    public void execute(Runnable command) {<FILL_FUNCTION_BODY>}
}

        if (command == null) {
            throw new NullPointerException();
        }
        submittedTaskCount.incrementAndGet();
        try {
            super.execute(command);
        } catch (RejectedExecutionException rx) {
            if (getQueue() instanceof TaskQueue) {
                // If the Executor is close to maximum pool size, concurrent
                // calls to execute() may result (due to use of TaskQueue) in
                // some tasks being rejected rather than queued.
                // If this happens, add them to the queue.
                final TaskQueue queue = (TaskQueue) getQueue();
                try {
                    if (!queue.force(command, 0, TimeUnit.MILLISECONDS)) {
                        submittedTaskCount.decrementAndGet();
                        throw new RejectedExecutionException("Queue capacity is full.", rx);
                    }
                } catch (InterruptedException x) {
                    submittedTaskCount.decrementAndGet();
                    throw new RejectedExecutionException(x);
                }
            } else {
                submittedTaskCount.decrementAndGet();
                throw rx;
            }
        }
    
<methods>public void <init>(int, int, long, java.util.concurrent.TimeUnit, BlockingQueue<java.lang.Runnable>) ,public void <init>(int, int, long, java.util.concurrent.TimeUnit, BlockingQueue<java.lang.Runnable>, java.util.concurrent.ThreadFactory) ,public void <init>(int, int, long, java.util.concurrent.TimeUnit, BlockingQueue<java.lang.Runnable>, java.util.concurrent.RejectedExecutionHandler) ,public void <init>(int, int, long, java.util.concurrent.TimeUnit, BlockingQueue<java.lang.Runnable>, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler) ,public void execute(java.lang.Runnable, long) ,public void execute(java.lang.Runnable) ,public int getAwaitTerminationSeconds() ,public Set<java.lang.String> getAwareNames() ,public List<org.dromara.dynamictp.common.entity.NotifyItem> getNotifyItems() ,public java.util.concurrent.ThreadPoolExecutor getOriginal() ,public List<java.lang.String> getPlatformIds() ,public Set<java.lang.String> getPluginNames() ,public long getQueueTimeout() ,public java.lang.String getRejectHandlerType() ,public long getRunTimeout() ,public List<org.dromara.dynamictp.core.support.task.wrapper.TaskWrapper> getTaskWrappers() ,public java.lang.String getThreadPoolAliasName() ,public java.lang.String getThreadPoolName() ,public void initialize() ,public boolean isNotifyEnabled() ,public boolean isPreStartAllCoreThreads() ,public boolean isRejectEnhanced() ,public boolean isTryInterrupt() ,public boolean isWaitForTasksToCompleteOnShutdown() ,public void setAllowCoreThreadTimeOut(boolean) ,public void setAwaitTerminationSeconds(int) ,public void setAwareNames(Set<java.lang.String>) ,public void setNotifyEnabled(boolean) ,public void setNotifyItems(List<org.dromara.dynamictp.common.entity.NotifyItem>) ,public void setPlatformIds(List<java.lang.String>) ,public void setPluginNames(Set<java.lang.String>) ,public void setPreStartAllCoreThreads(boolean) ,public void setQueueTimeout(long) ,public void setRejectEnhanced(boolean) ,public void setRejectHandler(java.util.concurrent.RejectedExecutionHandler) ,public void setRejectHandlerType(java.lang.String) ,public void setRunTimeout(long) ,public void setTaskWrappers(List<org.dromara.dynamictp.core.support.task.wrapper.TaskWrapper>) ,public void setThreadPoolAliasName(java.lang.String) ,public void setThreadPoolName(java.lang.String) ,public void setTryInterrupt(boolean) ,public void setWaitForTasksToCompleteOnShutdown(boolean) ,public void shutdown() ,public List<java.lang.Runnable> shutdownNow() <variables>protected int awaitTerminationSeconds,private Set<java.lang.String> awareNames,private boolean notifyEnabled,private List<org.dromara.dynamictp.common.entity.NotifyItem> notifyItems,private List<java.lang.String> platformIds,private Set<java.lang.String> pluginNames,private boolean preStartAllCoreThreads,private long queueTimeout,private boolean rejectEnhanced,private java.lang.String rejectHandlerType,private long runTimeout,private List<org.dromara.dynamictp.core.support.task.wrapper.TaskWrapper> taskWrappers,private java.lang.String threadPoolAliasName,protected java.lang.String threadPoolName,private boolean tryInterrupt,protected boolean waitForTasksToCompleteOnShutdown