zoukankan      html  css  js  c++  java
  • Callable和Future结合线程池使用

    package com.leelen.esafe.test;
    
    import org.junit.Test;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.*;
    
    public class ThreadPoolBuilderTest {
        // 创建线程池
        private static ExecutorService pool = new ThreadPoolExecutor(2, 4, 3000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(1000), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
    
        @Test
        public void testThread1() {
            System.out.println("---start---");
            // 模拟20个并发
            int num = 20;
            List<MyTask> myTasks = new ArrayList<>();
            for (int i = 0; i < num; i++) {
                MyTask myTask = new MyTask(i);
                myTasks.add(myTask);
            }
            // 执行任务
            List<Future<Integer>> futures = new ArrayList<>();
            try {
                for (int i = 0; i < myTasks.size(); i++) {
                    // 线程执行返回结果
                    Future<Integer> future = pool.submit(myTasks.get(i));
                    futures.add(future);
                }
            } catch (Exception e) {
            }
            // 输出线程执行结果
            try {
                for (int i = 0; i < futures.size(); i++) {
                    Future<Integer> future = futures.get(i);
                    Integer result = future.get();
                    System.out.println(result);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
            System.out.println("---end---");
        }
    
        // Callable线程任务
        class MyTask implements Callable<Integer> {
            Integer tid;
    
            public MyTask(Integer tid) {
                this.tid = tid;
            }
    
            @Override
            public Integer call() throws Exception {
                System.out.println("this thread id is = " + tid);
                Thread.sleep(3000);
                return tid;
            }
        }
    }
  • 相关阅读:
    Python—将py文件编译成so文件
    Python—网络通信编程之套接字基本原理
    Python—IO多路复用之epoll总结
    Python—IO多路复用之poll总结
    Python—IO多路复用之select总结
    希尔排序
    直接插入排序
    冒泡排序
    选择排序(C++,Java,Python实现)
    二叉搜索树的相关功能的实现
  • 原文地址:https://www.cnblogs.com/huangjinyong/p/13973279.html
Copyright © 2011-2022 走看看