Я пытаюсь создать служебную библиотеку, которая добавляет задачи в очередь ThreadPoolExecutor.Я хочу принять список / массив объектов, вызываемую функцию и список аргументов функции для передачи в вызываемую функцию.Теперь я хочу передать этот список или аргументы в вызове функции, который я делаю из вызываемого интерфейса, но в вызываемом интерфейсе есть только одна функция, которая не принимает никаких аргументов.
Может ли кто-нибудь помочь мне в перепроектировании структуры?Я хочу, чтобы клиенты этой библиотеки вызывали одну функцию с вышеупомянутыми аргументами, и библиотека должна обрабатывать все.
Мой текущий класс выглядит следующим образом:
public class ThreadPoolExecutorUtils {
private ExecutorService executorService;
/**
* Initialize Executor service with given number of threads
* @param threadCount : number of threads on the thread pool
*/
public ThreadPoolExecutorUtils(int threadCount) {
executorService = Executors.newFixedThreadPool(threadCount);
}
/**
* Add the task to the queue of current threadpool executor
* @param callableFunc: Function to be called from every thread
*/
public <T> void scheduleTask(Callable<T> callableFunc) {
executorService.submit(new Runnable() {
@Override
public void run() {
try {
callableFunc.call();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Blocks until all tasks have completed execution after a shutdown
* request, or the timeout occurs, or the current thread is
* interrupted, whichever happens first.
* @param timeOutSeconds : The maximum time in seconds to wait
*/
public void awaitCompletion(int timeOutSeconds) {
executorService.shutdown();
try {
executorService.awaitTermination(timeOutSeconds, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
executorService.shutdownNow();
}
}
}
В этом клиентедолжен создать объект ThreadPoolExecutorUtils, перебрать свой список задач и передать отдельную вызываемую функцию.Я хочу абстрагироваться от этого для клиента.