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();
                }
            }

    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    Part0:安装Django
    计算机技术与科学系列笔记
    svg基础知识体系建立
    js如何判断字符串里面是否含有某个字符串
    js字符串如何倒序
    js判断值是否是数字
    HTML DOM 知识点整理(一)—— Document对象
    Git hub pull时候的错误 : The current branch is not configured for pull No value for key branch.master.merge found in configuration
    Map的3种遍历[轉]
    如何刪除GitHub中的repository
  • 原文地址:https://www.cnblogs.com/use-D/p/8797432.html
Copyright © 2011-2022 走看看