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获取线程池执行完后的结果的主要内容,如果未能解决你的问题,请参考以下文章