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;
            }
        }
    }
  • 相关阅读:
    Android开发之百度地图的简单使用
    Android给ListView添加一个入场动画
    【安卓9】Cursor类、 查询
    【安卓9】SQLiteOpenHelper 类、增删改操作
    【安卓9】SQLiteDatabase类、ContentValues 类
    【安卓9】SQLite数据库
    【安卓8】SD卡操作
    【安卓8】文件的读写
    【安卓8】文件操作
    【安卓7】XML文件解析——PULL解析
  • 原文地址:https://www.cnblogs.com/huangjinyong/p/13973279.html
Copyright © 2011-2022 走看看