class PriorityDtpExecutor extends DtpExecutor {

    public PriorityDtpExecutor(int corePoolSize,
                               int maximumPoolSize,
                               long keepAliveTime,
                               TimeUnit unit,
                               int capacity) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, new PriorityBlockingQueue<>(capacity), Executors.defaultThreadFactory(), new AbortPolicy());
    }

    public PriorityDtpExecutor(int corePoolSize,
                               int maximumPoolSize,
                               long keepAliveTime,
                               TimeUnit unit,
                               int capacity,
                               ThreadFactory threadFactory) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, new PriorityBlockingQueue<>(capacity), threadFactory, new AbortPolicy());
    }

    public PriorityDtpExecutor(int corePoolSize,
                               int maximumPoolSize,
                               long keepAliveTime,
                               TimeUnit unit,
                               int capacity,
                               RejectedExecutionHandler handler) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, new PriorityBlockingQueue<>(capacity), Executors.defaultThreadFactory(), handler);
    }

    public PriorityDtpExecutor(int corePoolSize,
                               int maximumPoolSize,
                               long keepAliveTime,
                               TimeUnit unit,
                               int capacity,
                               ThreadFactory threadFactory,
                               RejectedExecutionHandler handler) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, new PriorityBlockingQueue<>(capacity), threadFactory, handler);
    }


    public PriorityDtpExecutor(int corePoolSize,
                               int maximumPoolSize,
                               long keepAliveTime,
                               TimeUnit unit,
                               PriorityBlockingQueue<Runnable> workQueue) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), new AbortPolicy());
    }

    public PriorityDtpExecutor(int corePoolSize,
                               int maximumPoolSize,
                               long keepAliveTime,
                               TimeUnit unit,
                               PriorityBlockingQueue<Runnable> workQueue,
                               ThreadFactory threadFactory) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, new AbortPolicy());
    }

    public PriorityDtpExecutor(int corePoolSize,
                               int maximumPoolSize,
                               long keepAliveTime,
                               TimeUnit unit,
                               PriorityBlockingQueue<Runnable> workQueue,
                               RejectedExecutionHandler handler) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), handler);
    }

    public PriorityDtpExecutor(int corePoolSize,
                               int maximumPoolSize,
                               long keepAliveTime,
                               TimeUnit unit,
                               PriorityBlockingQueue<Runnable> workQueue,
                               ThreadFactory threadFactory,
                               RejectedExecutionHandler handler) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler);
    }

    @Override
    protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {
        return new PriorityFutureTask<>(runnable, value);
    }

    @Override
    protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
        return new PriorityFutureTask<>(callable);
    }

    public void execute(Runnable command, int priority) {
        super.execute(PriorityRunnable.of(command, priority));
    }

    @Override
    public Future<?> submit(Runnable task) {
        return super.submit(PriorityRunnable.of(task, Priority.LOWEST_PRECEDENCE));
    }

    public Future<?> submit(Runnable task, int priority) {
        return super.submit(PriorityRunnable.of(task, priority));
    }

    @Override
    public <T> Future<T> submit(Runnable task, T result) {
        return super.submit(PriorityRunnable.of(task, Priority.LOWEST_PRECEDENCE), result);
    }

    public <T> Future<T> submit(Runnable task, T result, int priority) {
        return super.submit(PriorityRunnable.of(task, priority), result);
    }

    @Override
    public <T> Future<T> submit(Callable<T> task) {
        return super.submit(PriorityCallable.of(task, Priority.LOWEST_PRECEDENCE));
    }

    public <T> Future<T> submit(Callable<T> task, int priority) {
        return super.submit(PriorityCallable.of(task, priority));
    }

    /**
     * Priority Comparator
     *
     * @return Comparator
     */
    public static Comparator<Runnable> getRunnableComparator() {<FILL_FUNCTION_BODY>}

}

        return (o1, o2) -> {
            if (!(o1 instanceof DtpRunnable) || !(o2 instanceof DtpRunnable)) {
                return 0;
            }
            Runnable po1 = ((DtpRunnable) o1).getOriginRunnable();
            Runnable po2 = ((DtpRunnable) o2).getOriginRunnable();
            if (po1 instanceof Priority && po2 instanceof Priority) {
                return Integer.compare(((Priority) po1).getPriority(), ((Priority) po2).getPriority());
            }
            return 0;
        };
    
<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