【发布时间】:2016-02-25 07:25:13
【问题描述】:
我正在使用 Hystrix 库来处理网络调用。这就是我用于线程池配置的内容
HystrixThreadPoolProperties.Setter threadPropSetter = HystrixThreadPoolProperties.Setter();
threadPropSetter.withCoreSize(100);
threadPropSetter.withMaxQueueSize(1000);
我正在使用常用的 HytrixCommandKey 和 HytrixThreadPoolKey 创建 1000 个 HytrixCommand 对象的负载。但是线程池在服务前 100 个线程后执行回退逻辑,而不是使用线程池队列。这可以通过将threadpool,coreSize设置为1000来解决。但是我使用的是java,将coreSize设置为1000会产生1000个线程,这会消耗大量的系统资源。
谁能为此提供解决方案,以便线程池队列实际上可以对线程进行排队,而不是仅仅恢复到回退逻辑?
【问题讨论】:
-
请发布一些代码示例,展示您如何创建和执行命令。这看起来像预期的行为是您没有收获命令的结果。
-
@OldCurmudgeon - 问题已解决。我实际上是在我的 main 方法中为 1000 个命令运行一个循环。所以jvm在循环完成后终止。由于 hystrix 线程池基本上使用守护线程,所以队列中的线程在 jvm 终止后没有被拾取。所以我只是在循环完成后在我的 main 方法中添加了一个 Thread.sleep(),现在排队工作正常。
标签: java multithreading threadpool