• jdk8 线程池策略


    在ThreadPoolExecutor中提供了4种线程的策略可以供开发者直接使用:
    •AbortPolicy策略:默认策略,如果线程池队列满了丢掉这个任务并且抛出RejectedExecutionException异常。
    •DiscardPolicy策略:如果线程池队列满了,会直接丢掉这个任务并且不会有任何异常。
    •DiscardOldestPolicy策略:如果队列满了,会将最早进入队列的任务删掉腾出空间,再尝试加入队列。
    •CallerRunsPolicy策略:如果添加到线程池失败,那么主线程会自己去执行该任务,不会等待线程池中的线程去执行。

    如果你要自定义一个拒绝策略,那么可以这样写:

    
    executor.setRejectedExecutionHandler(new RejectedExecutionHandler() {
             @Override
             public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                 // 拒绝策略的逻辑
            }
         });
    
    

    jdk8 线程池

    
    ExecutorService fixedThreadPool = null;
     try {
       // 多线程
      // 线程池 设置线程池名称
      ThreadFactory namedThreadFactory =
           new ThreadFactoryBuilder()
               .setNameFormat("thread-Pool-%d")
               .build();
       fixedThreadPool =
           new ThreadPoolExecutor(
               20,// 核心线程数
              50,// 最大线程数
              0L,
               TimeUnit.MILLISECONDS,
               new LinkedBlockingQueue<Runnable>(500),// 设置队列大小
              namedThreadFactory,
               new ThreadPoolExecutor.CallerRunsPolicy());// 设置现场池队列满了之后的策略
    
      // 提交一批任务
      ExecutorService finalFixedThreadPool = fixedThreadPool;
       List<CompletableFuture<JSONObject>> futures =
           我的队列.stream()
               .map(
                   s ->
                       CompletableFuture.supplyAsync(
                           () -> {
                             //处理逻辑
                             return new JSONObject();
                           },
                           finalFixedThreadPool))
               .collect(Collectors.toList());
       // 将这一批CompletableFuture对象,使用allOf操作得到一个CompletableFuture对象
      CompletableFuture<Void> allFutures =
           CompletableFuture.allOf(futures.toArray(new CompletableFuture[] {}));
       // allFutures(即所有futures)执行完毕后。执行thenApply()内部的逻辑,实现转化。因为此处依旧是交由子线程处理的,所以返回的依旧是CompletableFuture<List<JSONObject>>对象
      CompletableFuture<List<JSONObject>> listCompletableFuture =
           allFutures.thenApply(
               s -> futures.stream().map(r -> r.join()).collect(Collectors.toList()));
    
      log.info("多线程验执行完毕");
       List<JSONObject> threadResultList = listCompletableFuture.get();
       if (!CollectionUtils.isEmpty(threadResultList)) {
         resultArray.addAll(threadResultList);
       }
     } catch (Exception e) {
       log.error("多线程验执行异常,异常信息为:" + e.getMessage(), e);
     } finally {
       if (null != fixedThreadPool) {
         fixedThreadPool.shutdown();
       }
     }
    
    
  • 相关阅读:
    对于.net config文件中加密使用
    删除windows不想要的服务
    ora12514: tns: 监听程序当前无法识别连接描述符中请求的服务
    读《.NET设计规范》笔记
    创建服务总结
    加载XML文档
    XMLHttpRequest对象的使用
    ReportView控件的使用
    C#代码的编译过程
    Qt vs设置可执行程序图标
  • 原文地址:https://www.cnblogs.com/fb010001/p/16580790.html
Copyright © 2020-2023  润新知