ThreadPoolExecutor
ThreadPoolExecutor е чудесен начин за изпълнение на паралелизирани задачи в множество различни нишки в рамките на ограничен набор от нишки. Ако искате да изпълнявате работа едновременно и да запазите контрола върху това как се изпълнява работата, това е инструментът за работата.
Използването на ThreadPoolExecutor започва с конструиране на нова инстанция с конфигуриране пула от нишки:
// Определете броя на ядрата на устройството
int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors();
// Създайте пул от нишки, преминавайки в опции за конфигуриране
// int minPoolSize, int maxPoolSize, long keepAliveTime, TimeUnit unit,
// BlockingQueue<Runnable> workQueue
ThreadPoolExecutor executor = new ThreadPoolExecutor(
NUMBER_OF_CORES*2,
NUMBER_OF_CORES*2,
60L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>()
);
Използване на Runnables в ThreadPoolExecutor
Добавяне на изпилниза задача към пула с нишки
// Изпълнява задача върху нишка в пула от нишки
executor.execute(new Runnable() {
public void run() {
// Кода на задач1ата която ще се изпълни на нишка от пула с нишки
}
});
Нишките се използват едновременно и приемат съобщения, докато всички нишки не са заети. Ако всички нишки в момента са заети, Executor обекта ще постави на опашка новата задача, докато някоя нишка стане налична.
Спиране на ThreadPoolExecutor
Пулът от нишки може да бъде изключен по всяко време с командата за изключване:
executor.shutdown();
Това ще спе всички задачи безопасно, след като всички са обработени. За да се изключи незабавно изпълнението, вместо това се използва executor.shutdownNow ().
Last updated
Was this helpful?