Как реализовать PriorityBlockingQueue с ThreadPoolExecutor и пользовательские задачи

Я много искал, но не смог найти решение своей проблемы.

У меня есть свой собственный класс,BaseTask, который используетThreadPoolExecutor для решения задач.
Если я не хочу расставлять приоритеты (т.е. используяLinkedBlockingQueue) это работает просто отлично, но когда я пытаюсь использоватьPriorityBlockingQueue я получилClassCastException посколькуThreadPoolExecutor оборачивает мои задачи вFutureTask объект.
Это явно нормально, потому чтоFutureTaskне реализуетComparable, но как бы я решил проблему приоритета?
Я читал, что вы можете переопределитьnewTaskFor вThreadPoolExecutor, но я не могу найти этот метод вообще ...?

Любые предложения будут высоко ценится!

Некоторый код, чтобы помочь:

В моемBaseTask класс у меня есть

private static final BlockingQueue<Runnable> sWorkQueue = new PriorityBlockingQueue<Runnable>();

private static final ThreadFactory sThreadFactory = new ThreadFactory() {
    private final AtomicInteger mCount = new AtomicInteger(1);

    public Thread newThread(Runnable r) {
        return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
    }
};

private static final BaseThreadPoolExecutor sExecutor = new BaseThreadPoolExecutor(
    1, Integer.MAX_VALUE, 10, TimeUnit.SECONDS, sWorkQueue, sThreadFactory);

private final BaseFutureTask<Result> mFuture;

public BaseTask(int priority) {
    mFuture = new BaseFutureTask<Result>(mWorker, priority);
}

public final BaseTask<Params, Progress, Result> execute(Params... params) {

    /* Some unimportant code here */

    sExecutor.execute(mFuture);
}

ВBaseFutureTask учебный класс

@Override
public int compareTo(BaseFutureTask another) {
    long diff = this.priority - another.priority;

    return Long.signum(diff);
}

ВBaseThreadPoolExecutor класс я переопределить 3submit методы ...
Конструктор в этом классе вызывается, но ни один изsubmit методы

Ответы на вопрос(6)

Ваш ответ на вопрос