Кварцевый планировщик theadpool

Класс SimpleThreadPool, поставленный наряду с Кварцевым Планировщиком, не имеет поведения FIFO. Я хочу удостовериться, храню ли я верность добавляющей работе к планировщику, они обращены в Первом - в - Сначала - основание. Действительно ли там какой-либо ThreadPool доступен для этого? Или есть ли какой-либо другой способ достигнуть этого?

5
задан erickson 12 August 2010 в 20:22
поделиться

1 ответ

Этого можно добиться, делегировав ThreadPoolExecutor с очередью FIFO, как показано ниже:

public class DelegatingThreadPool implements ThreadPool {

private int size = 5; //Fix this up if you like
private final ThreadPoolExecutor executor = new ThreadPoolExecutor(size, size,
                                  0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());

public boolean runInThread(Runnable runnable) {
    synchronized (executor) {
        if (executor.getActiveCount() == size) {
            return false;
        }
        executor.submit(runnable);
        return true;
    }
}

public int blockForAvailableThreads() {
    synchronized (executor) {
        return executor.getActiveCount();
    }
}

public void initialize() throws SchedulerConfigException {
    //noop
}

public void shutdown(boolean waitForJobsToComplete) {
    //No impl provided for wait, write one if you like
    executor.shutdownNow();
}

public int getPoolSize() {
    return size;
}

public void setInstanceId(String schedInstId) {
    //Do what you like here
}

public void setInstanceName(String schedName) {
    //Do what you like here
}

Возможно, что активное количество исполняемых файлов не будет точно соответствовать точному количеству задач, которые выполняются. выполнение. Вам нужно будет добавить защелку и использовать beforeExecute, чтобы гарантировать что задача запущена, если это необходимо.

5
ответ дан 14 December 2019 в 19:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: