第一次使用ThreadPoolExecutor遇到的问题

   最近遇到个问题,因为业务需求将表中的五个字段改成了CLOB,结果出现了sql异常,修改方式就是将这五个字段单独拿出来查询,结果导致了查询慢的问题,由于sql年代久远,涉及十几张表的关联,加减乘除,group by等等,实在不想大改。
       后端:Java,JDK8
       前端:Nexacro

因为数据量特别大,甲方不同意分页查询,只能尝试使用多线程来解决,虽通过文心一言 来查询合适的代码来实现。结合阿里巴巴代码规约,最终确认使用如下代码:

public static ThreadPoolExecutor creatThread(String name, int size) {
     ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat(name).build();
    return new ThreadPoolExecutor(size,//corePoolSize:线程池核心池的大小。
            size,//maximumPoolSize: 线程池的最大线程数。
            0L,//keepAliveTime: 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间(空闲线程存活时间)。
            TimeUnit.MICROSECONDS,//unit: keepAliveTime 的时间单位。
            new LinkedBlockingQueue<>(1024),//workQueue: 存放提交但未执行任务的队列。
            threadFactory,//threadFactory: 创建线程的工厂类。
            new ThreadPoolExecutor.AbortPolicy()//handler:等待队列满后的拒绝策略。
    );
}

ThreadFactoryBuilder使用的是谷歌guava。

POM为

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>32.1.3-jre</version>
</dependency>

在Idea中运行正常,测试了几十遍,没有任何问题,但是由于提交代码要使用基于Eclipse的工具,在打开Eclipse时,就发现出现了编译错误。

从源代码分析,使用的构造器如下:

 public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
        if (corePoolSize < 0 ||
            maximumPoolSize <= 0 ||
            maximumPoolSize < corePoolSize ||
            keepAliveTime < 0)
            throw new IllegalArgumentException();
        if (workQueue == null || threadFactory == null || handler == null)
            throw new NullPointerException();
        this.acc = System.getSecurityManager() == null ?
                null :
                AccessController.getContext();
        this.corePoolSize = corePoolSize;
        this.maximumPoolSize = maximumPoolSize;
        this.workQueue = workQueue;
        this.keepAliveTime = unit.toNanos(keepAliveTime);
        this.threadFactory = threadFactory;
        this.handler = handler;
    }

但是Eclipse一直提示没有找到构造器,查看源代码没有发现问题:

public class LinkedBlockingQueue<E> extends AbstractQueue<E>
        implements BlockingQueue<E>, java.io.Serializable{

}
public static class AbortPolicy implements RejectedExecutionHandler {

}

但还是尝试修改了代码,以避免提交代码后出现编译问题,修改后的代码编译正常,代码如下:

public static ThreadPoolExecutor creatThread(String name, int size) {
        ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat(name).build();
        BlockingQueue<Runnable> linkedBlockingQueue = new LinkedBlockingQueue<>(1024);
        RejectedExecutionHandler abortPolicy = new ThreadPoolExecutor.AbortPolicy();
       return new ThreadPoolExecutor(size,//corePoolSize:线程池核心池的大小。
               size,//maximumPoolSize: 线程池的最大线程数。
               0L,//keepAliveTime: 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间(空闲线程存活时间)。
               TimeUnit.MICROSECONDS,//unit: keepAliveTime 的时间单位。
               linkedBlockingQueue,//workQueue: 存放提交但未执行任务的队列。
               threadFactory,//threadFactory: 创建线程的工厂类。
               abortPolicy//handler:等待队列满后的拒绝策略。
       );
   }

不知道为何,在公司内网环境中无法编译通过,在我的PC上新装的Eclipse中可以编译通过。

新安装的Eclipse版本为:2023-12 (4.30.0);

公司内网Eclipse版本为:2017-06(好像是这个);

再有一个不同就是内网是jar包,我本地PC是maven+boot。

为什么编译不过,没有探究出来,希望有大神可以指点一二。

相关推荐

  1. 第一使用ThreadPoolExecutor遇到问题

    2023-12-19 08:06:02       46 阅读
  2. 第一使用ThreadPoolExecutor处理业务

    2023-12-19 08:06:02       33 阅读
  3. with ThreadPoolExecutor() as executor使用举例

    2023-12-19 08:06:02       30 阅读
  4. 记录一业务遇到sql问题

    2023-12-19 08:06:02       16 阅读
  5. ceph-deploy 遇到使用问题

    2023-12-19 08:06:02       41 阅读
  6. 使用Collections.singletonList()遇到问题

    2023-12-19 08:06:02       28 阅读
  7. 使用fegin遇到俩个问题

    2023-12-19 08:06:02       18 阅读
  8. Element-plus使用遇到问题

    2023-12-19 08:06:02       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-19 08:06:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-19 08:06:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-19 08:06:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-19 08:06:02       20 阅读

热门阅读

  1. 聊聊reactor-logback的AsyncAppender

    2023-12-19 08:06:02       39 阅读
  2. Scrapy+Selenium项目实战--携程旅游信息爬虫

    2023-12-19 08:06:02       30 阅读
  3. MySQL数据库的缓存

    2023-12-19 08:06:02       41 阅读
  4. Vue中表单数据和过滤器的简单使用

    2023-12-19 08:06:02       36 阅读
  5. 51单片机4线并发IO口控制1602LCD

    2023-12-19 08:06:02       38 阅读
  6. 第五章 图论 邻接矩阵存图

    2023-12-19 08:06:02       31 阅读
  7. strings

    2023-12-19 08:06:02       37 阅读
  8. Rust 嵌入式开发

    2023-12-19 08:06:02       39 阅读
  9. 【Rust 学习笔记】References and Borrowing

    2023-12-19 08:06:02       39 阅读
  10. jQuery Ajax 缓存

    2023-12-19 08:06:02       43 阅读
  11. NPM:编程世界的万能胶水

    2023-12-19 08:06:02       49 阅读