zoukankan      html  css  js  c++  java
  • 创建安全的ThreadPoolExecutor线程池


            LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue<String>(1024);
            ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("job-pool-%d").build();
            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors()*2,
                    Runtime.getRuntime().availableProcessors()*2,
                    0,
                    TimeUnit.SECONDS,
                    linkedBlockingQueue,
                    THREAD_FACTORY,
                    new ThreadPoolExecutor.AbortPolicy());
            CountDownLatch countDownLatch = new CountDownLatch(list.size());
            try{
                for (Object object : list) {

                    //类要实现Callable接口
                    Future<Integer> future = threadPoolExecutor.submit(类);
                    resultList.add(future);
                    countDownLatch.countDown();

                   //循环判断queue中的线程大于1000,则等待1秒,直到小于1000位置,防止进行线程被拒绝
                    while(linkedBlockingQueue.size()>1000) {
                        Thread.sleep(1000);
                        System.out.println("暂停1秒");
                    }
                }

                //等待全部完成,在继续操作
                countDownLatch.await();

                //关闭线程池(不在接收新的线程)
                threadPoolExecutor.shutdown();

             }catch (Exception ex){

                //出现异常后,关闭线程池
                threadPoolExecutor.shutdownNow();
                ex.printStackTrace();
             }
            }finally {

                //最终判断线程池是否为空,进行关闭
                if(threadPoolExecutor!=null) {
                    threadPoolExecutor.shutdownNow();
                }
            }

    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    session概述
    Flask实现登录功能【附完整Demo】(转)
    Python __repr__()方法:显示属性(转)
    Python使用SQLAlchemy连接数据库CRUD
    网络基础知识集合
    面向切面编程AOP
    SQL基础 insert table_name_1 (field1,field2,...) select value1,value2,... from table_name_2 ...
    java中char类型的变量为什么可以赋值为整型数字?
    iOS应用生命周期
    视图生命周期与视图控制器生命周期
  • 原文地址:https://www.cnblogs.com/use-D/p/8797432.html
Copyright © 2011-2022 走看看