java builder 线程池_java – camel线程池查询

我正在使用camel线程池并使用池大小和最大池大小.我的理解是每个请求都将由一个线程处理,如果请求>池大小,将使用最大池大小在池中创建新的一个线程.为了确保我的理解,我在POC之下做了.

public class FileMoverRoute extends SpringRouteBuilder {

@Override

public void configure() throws Exception {

CamelContext context = getContext();

ExecutorService executorService = new ThreadPoolBuilder(context)

.poolSize(1).maxPoolSize(10).maxQueueSize(100).build("CustomThreadPool");

from("file://C:/from").log("Received ${body}:${threadName}").threads().executorService(executorService)

.log("Processing ${body}:${threadName}").process(new FileProcessor()).to("file://C:/to");

}

}

public class FileProcessor implements Processor{

public void process(Exchange exc) throws Exception {

Map headerMap = exc.getIn().getHeaders();

System.out.println(" sleep for minute");

TimeUnit.MINUTES.sleep(1);

System.out.println(" woke up"+headerMap);

}

}

我在文件处理器中睡了1分钟.如果我从文件夹中放入1个文件(1.txt)我可以看到收到的&处理登录控制台.如果将下一个2个文件(2.txt,3.txt)文件放在文件夹中.我可以看到收到的2个文件的日志没有处理日志.因为我的最大池大小是10,所以驼峰应该增加线程并选择文件.

>为什么新的线程没有在池中创建?

>为什么没有选择新文件?

>如何解决这个问题?

解决方法:

由于您将poolsize设置为1,因此只使用一个线程进行处理.

线程创建如下

>如果线程池小于poolSize,则会创建一个新线程进行处理.

>如果作业小于maxQueueSize,则将作业放在队列上以等待空闲线程.

>如果队列已满并且线程池实例化的线程数少于maxPoolSize,则会创建一个新线程来处理作业.

您可以通过减少QueueSize来自行测试

标签:java,multithreading,threadpool,apache-camel

来源: https://codeday.me/bug/20190702/1353404.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值