java获取线程池执行完后的结果

Posted yinxianluo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java获取线程池执行完后的结果相关的知识,希望对你有一定的参考价值。

public interface AcceptRecordDao

public int getNum(PersonCode p);

public class PersonCode

private String name;

private String rel[];

public String getName()

return name;

public void setName(String name)

this.name = name;

public String[] getRel()

return rel;

public void setRel(String[] rel)

this.rel = rel;



 

import java.util.List;

import java.util.concurrent.Callable;

public class PersonCodeCallable implements Callable<List<PersonCode>>

private List<PersonCode> personList;

private AcceptRecordDao acceptRecordDao;

public void PersonCodeCallble(AcceptRecordDao acceptRecordDao, List<PersonCode> personList)

this.personList = personList;

this.acceptRecordDao = acceptRecordDao;

@Override

public List<PersonCode> call() throws Exception

if(!personList.isEmpty())

for(PersonCode person : personList)

person.getName();

person.setName("张三");

acceptRecordDao.getNum(person);

return personList;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

public class TestPool

//@Autowrite

private AcceptRecordDao acceptRecordDao;

public static void getSum(List<PersonCode> list)

List<PersonCode> resultList = new ArrayList<>();

List<List<PersonCode>> lists = com.google.common.collect.Lists.partition(list, 3);

List<Future<List<PersonCode>>> futureList = new ArrayList<>();

ExecutorService fp = Executors.newFixedThreadPool(10);

if(!lists.isEmpty())

for(List<PersonCode> partitionList : lists)

PersonCodeCallable pc = new PersonCodeCallable(acceptRecordDao, partitionList);

Future<List<PersonCode>> future = fp.submit(pc);

futureList.add(future);

for(Future<List<PersonCode>> futures : futureList)

try

List<PersonCode> p = futures.get();

if(!p.isEmpty())

resultList.addAll(p);

catch(Exception e)

fp.shutdown();

Java并发程序设计线程池之获取任务执行结果

 

1.1. 获取执行结果

使用Callable接口可以方便的获取任务执行结果。

 

ExecutorService  executorService = Executors.newFixedThreadPool(2);

Future<Integer>  future = executorService.submit( new Callable(){

 

@Override

public Integer  call() throws Exception {

return 1;

}

 

 

});

 

try {

int  ret = future.get();

System.out.println("return:" + ret);

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

 

任务成功执行完成后,Future接口的get()方法返回,并取得Callable实现类的call()方法的返回值。

return:1

以上是关于java获取线程池执行完后的结果的主要内容,如果未能解决你的问题,请参考以下文章

Java 线程池的实现

java线程执行完后自己结束吗

JAVA 递归线程池 ExecutorService / ForkJoinPool

Java并发程序设计线程池之获取任务执行结果

java如何在多线程执行完后才执行其他任务

java 多线程 , 等待所有子线程都执行完后 , 在执行主线程(其中的一种 , 也是个人觉得最好用的一种)