1. @Override
    2. public String findJdbcDataSource() throws ExecutionException, InterruptedException {
    3. //1、获取任务列表 连接信息
    4. List<DataSouceJdbc> jdbcDataSource = dataSouceJdbcMapper.findJdbcDataSource();
    5. List<FutureTask<Integer>> taskList = new ArrayList<>();
    6. for (int i = 0 , n = jdbcDataSource.size(); i < n; i++) {
    7. //创建有返回值 多线程任务
    8. SearchLoanTask searchLoanTask = new SearchLoanTask(jdbcDataSource.get(i),this);
    9. //提交任务 收集返回结果
    10. FutureTask<Integer> futureTask = new FutureTask<>(searchLoanTask);
    11. //任务添加到容器,容器存储当前执行结果
    12. taskList.add(futureTask);
    13. //任务执行
    14. BasicExecuteThreadPool.getInstance().submit(futureTask);
    15. // BasicExecuteThreadPool.getInstance().execute(searchLoanTask);
    16. }
    17. return computeTaskItem(taskList,jdbcDataSource);
    18. }
    19. /**
    20. * 计算返回结果是否 为预期值
    21. * @param taskList
    22. * @param jdbcDataSource
    23. * @return
    24. * @throws ExecutionException
    25. * @throws InterruptedException
    26. */
    27. public String computeTaskItem(List<FutureTask<Integer>> taskList, List<DataSouceJdbc> jdbcDataSource) throws ExecutionException, InterruptedException {
    28. Integer result = 0;
    29. // 从future中取出值来
    30. for (FutureTask<Integer> future : taskList) {
    31. result = result + future.get();
    32. }
    33. return result == jdbcDataSource.size() ? "任务全部执行完成" : (jdbcDataSource.size() - result) + "条任务执行失败";
    34. }
    1. @Override
    2. public String findJdbcDataSource() throws ExecutionException, InterruptedException {
    3. List<DataSouceJdbc> jdbcDataSource = dataSouceJdbcMapper.findJdbcDataSource();
    4. List<FutureTask<Integer>> taskList = new ArrayList<>();
    5. for (int i = 0 , n = jdbcDataSource.size(); i < n; i++) {
    6. //创建有返回值 多线程任务
    7. SearchLoanTask searchLoanTask = new SearchLoanTask(jdbcDataSource.get(i),this);
    8. //提交任务 收集返回结果
    9. FutureTask<Integer> futureTask = new FutureTask<>(searchLoanTask);
    10. //任务添加到容器,容器存储当前执行结果
    11. taskList.add(futureTask);
    12. //任务执行
    13. BasicExecuteThreadPool.getInstance().submit(futureTask);
    14. // BasicExecuteThreadPool.getInstance().execute(searchLoanTask);
    15. }
    16. return computeTaskItem(taskList,jdbcDataSource);
    17. }
    18. }
    19. /**
    20. * 计算返回结果是否 为预期值
    21. * @param taskList
    22. * @param jdbcDataSource
    23. * @return
    24. * @throws ExecutionException
    25. * @throws InterruptedException
    26. */
    27. public String computeTaskItem(List<FutureTask<Integer>> taskList, List<DataSouceJdbc> jdbcDataSource) throws ExecutionException, InterruptedException {
    28. Integer result = 0;
    29. // 从future中取出值来
    30. for (FutureTask<Integer> future : taskList) {
    31. result = result + future.get();
    32. }
    33. return result == jdbcDataSource.size() ? "任务全部执行完成" : (jdbcDataSource.size() - result) + "条任务失败";
    34. }
    1. package cn.zhm.day3;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. import java.util.concurrent.Callable;
    5. import java.util.concurrent.ExecutionException;
    6. import java.util.concurrent.ExecutorService;
    7. import java.util.concurrent.Executors;
    8. import java.util.concurrent.FutureTask;
    9. public class FutureTaskForMultiCompute {
    10. public static void main(String[] args) throws InterruptedException,
    11. ExecutionException {
    12. FutureTaskForMultiCompute inst = new FutureTaskForMultiCompute();
    13. // 创建任务集合 FutureTask:可用于异步获取执行结果或取消执行任务的场景
    14. List<FutureTask<Integer>> taskList = new ArrayList<FutureTask<Integer>>();
    15. ExecutorService execut = Executors.newScheduledThreadPool(5);
    16. for (int i = 0; i < 10; i++) {
    17. // 传入Callable对象创建FutureTask对象
    18. FutureTask<Integer> task = new FutureTask<Integer>(
    19. inst.new ComputeTask(i, "" + i));
    20. // 把多个future放在集合中
    21. taskList.add(task);
    22. // 提交给线程池执行任务,也可以通过exec.invokeAll(taskList)一次性提交所有任务;
    23. execut.submit(task);
    24. System.out.println("所有计算任务提交完毕, 主线程接着干其他事情!");
    25. }
    26. Integer result = 0;
    27. // 从future中取出值来
    28. for (FutureTask<Integer> future : taskList) {
    29. result = result + future.get();
    30. }
    31. // 打印求出来的值
    32. System.out.println("result=" + result);
    33. }
    34. public class ComputeTask implements Callable<Integer> {
    35. private Integer result = 0;
    36. private String taskName = "";
    37. ComputeTask(Integer result, String taskName) {
    38. this.result = result;
    39. this.taskName = taskName;
    40. System.out.println("生成子线程计算任务: " + taskName);
    41. }
    42. public String getTaskName() {
    43. return this.taskName;
    44. }
    45. @Override
    46. public Integer call() throws Exception {
    47. for (int i = 0; i < 10; i++) {
    48. result += i;
    49. }
    50. Thread.sleep(5000);
    51. System.out.println("子线程计算任务: " + taskName + " 执行完成!");
    52. return result;
    53. }
    54. }
    55. }