Текущий сценарий: Мой код (скажем, «Class Caller: caller()») будет вызывать метод класса (класс ThreadPoolClass: writeData()), который внутренне выполняет свою задачу через ThreadPoolExecutor. Теперь эта реализация не ждет завершения всех ее задач.ThreadPoolExecutor: ожидает завершения вне метода
Вопрос: Хотя мой код (метод caller()) должен ждать завершения всех задач из этого (метод writeData()) ThreadPoolExecutor. В настоящее время контроллер возвращается к методу caller() после отправки задач.
Реализация ThreadPoolClass не может быть изменена, поэтому я хотел выяснить, как я могу это достичь.
// Пример кода
class Caller {
public static void main(String[] args) {
ThreadPoolClass t = new ThreadPoolClass();
t.writeData();
// I want to wait here until the execution is complete
}
}
class ThreadPoolClass{
void writeData() {
Runnable thread = new Runnable() {
@Override
public void run() {
// Do some database commit operations
}
};
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(1);
fixedThreadPool.submit(thread);
fixedThreadPool.shutdown();
}
}
Все ХА будет полезно - даже будь это возможно или нет.
Примечание ** это всего лишь образец, мой исходный код имеет цепочку вызовов класса, которая в конечном итоге выполняет метод с ThreadPoolExecutor.
Благодаря Dish
Было бы легче, если бы мы могли видеть фактический код. В принципе, вы можете использовать Futures, Executor.awaitTermination(), чтобы назвать два. Не могу сказать, возможно ли это без изменения кода ThreadPoolClass, не видя его. – Fildor
Я добавил пример кода. Пожалуйста, проверьте то же самое. – Dish
, если вы хотите подождать до завершения выполнения и не будете делать что-либо другое, нужно ли использовать потоки? – Zavael