Здесь я хочу вызвать n
thread и выполнить мою функцию padrDao.saveGuidanceDetails(sgd)
, которая является методом DAO, выполняющим операцию вставки, и возвращает длинное значение, как показано в приведенном ниже коде.
Я использую Callable, но он просит меня вернуть какое-то значение, но я не знаком с потоками, чтобы использовать Runnable
для той же работы.Может кто-нибудь, пожалуйста, подтвердите правильность кода или внесение каких-либо изменений?Я чувствую, что код неправильный, так как внутри вызываемого оператора есть оператор return, и это выведет меня за пределы основного метода для самой первой задачи.
int totalThreadsNeeded=listForguidanceItems.size();
ExecutorService executor = Executors.newFixedThreadPool(totalThreadsNeeded);
List<Callable<Void>> runnableTasks = new ArrayList<>();
final PriceLineItemsResultExt response1=response;
for(final ProductLineItemResultExt item: listForguidanceItems)
{
int counter=0;
final SavedGuidanceDetailsDto sgd=list.get(counter);
Callable<Void> task1 = new Callable() {
public Void call() {
if (sgd.hasGuidance())
{
if (response1.isSaveGuidance()) {
long guidanceDetailsId = padrDao.saveGuidanceDetails(sgd);
item.setGuidanceDetailsId(String.valueOf(guidanceDetailsId));
}
}
return null;
}};
counter++;
runnableTasks.add(task1);
}
try {
executor.invokeAll(runnableTasks);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.info("Thread fail exception " + e);
}
executor.shutdown();
Просьба предложить мне модификации с правильным кодом?Заранее спасибо