返回类型为void执行服务

问题描述 投票:0回答:1

在这里,我想打电话给n线程和执行我的功能padrDao.saveGuidanceDetails(sgd)是在进行插入操作的DAO方法,并返回一个long值如下图所示的代码。

使用林可赎回,但它要求我回去一定的价值,但我不熟悉线程使用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();

PLS建议我用正确的代码修改?提前致谢

runnable executorservice java-threads callable
1个回答
0
投票

要使用Runnable接口,你可以简单地更换这些:

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

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

而且随着运行的,你就不会返回任何东西。

当然,你还就需要修改runnableTasks是一个List<Runnable>如果TOU仍希望将这些存储在一个集合(可能不是),也改变你提交他们在ExecutorService的结合的方式:

executor.submit(your_Runnable_object)
© www.soinside.com 2019 - 2024. All rights reserved.