Служба Исполнителя с пустым типом возврата - PullRequest
0 голосов
/ 06 февраля 2019

Здесь я хочу вызвать 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();

Просьба предложить мне модификации с правильным кодом?Заранее спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

Чтобы использовать Runnable, вы можете просто заменить их:

Callable<Void> task1 = new Callable() {
        public Void call() {
...

на

Runnable task1 = new Runnable {
  public void run() {
...

И с Runnable вам не придется ничего возвращать.

OfКонечно, вам также нужно изменить runnableTasks на List<Runnable>, если вы все еще хотите сохранить их в Коллекции (возможно, нет), а также изменить способ отправки их в ExecutorService следующим образом:

executor.submit(your_Runnable_object)
...