问题标签 [threadpoolexecutor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
488 浏览

java - 启动新线程而不是放入队列

从 javadoc 为ThreadPoolExecutor

当在方法execute(java.lang.Runnable) ...中提交新任务时。如果运行的线程数大于corePoolSize但小于maximumPoolSize,则只有在队列已满时才会创建新线程。

在这种情况下,我怎样才能让它ThreadPool启动新线程而不是将任务提交到队列?

例子:

我有 corePoolSize=5 和 maxPoolSize=10 的线程和无界队列。

假设corePoolSize线程现在很忙,并且新任务到达 - 池必须启动新线程并执行新任务。

假设maxPoolSize线程现在很忙,并且新任务到达 - 池必须将任务持久化到队列中,并且第一个空闲线程必须接受这个任务并执行。

0 投票
1 回答
1791 浏览

java - 以非阻塞方式处理文件上传

后台线程在这里

只是为了明确目标 - 用户将上传一个大文件,并且必须立即重定向到另一个页面以进行不同的操作。但是文件很大,从控制器的InputStream读取需要时间。所以我不情愿地决定分叉一个新的线程来处理这个 I/O。代码如下:

控制器小服务程序

模型类

可运行

我的疑问/疑问:

  1. 从 Servlet 手动生成线程在逻辑上对我来说是有意义的,但在编码方面让我感到害怕——容器毕竟不知道这些线程(我想是的!)
  2. 当前代码给出了一个非常明显的异常 -由于 doPost(...) 方法在 run() 方法完成之前返回,因此无法访问流

    /li>
  3. 请记住第 1 点,无论如何使用 Executor 框架对我有帮助吗?

    /li>

那么我应该如何确保用户不会阻塞并且流仍然可以访问,以便可以从中读取(上传的)文件

0 投票
2 回答
6910 浏览

java - 在 Java 中指定任务顺序执行

我搜索了很多,但找不到任何解决方案。我以这种方式使用java线程池:

以这种方式,任务按顺序执行(如队列中)。但我需要更改“选择下一个任务”策略。所以我想为每个任务指定优先级(它不是线程优先级)并执行对应于这些优先级的任务。因此,当执行者完成另一个任务时,它会选择下一个任务作为具有最高优先级的任务。它描述了常见问题。也许有更简单的方法不考虑优先级。它选择最后添加的任务作为下一个执行而不是第一个添加的任务。粗略地说 FixedThreadPool 使用 FIFO 策略。我可以使用例如 LIFO 策略吗?

0 投票
1 回答
2213 浏览

java - 在不终止服务的情况下更改 ScheduledThreadPoolExecutorService 的延迟

顾名思义,我们有一个守护进程框架,它使用 Executor 服务来调度守护进程。

在运行时,我想更改两次运行Runnable类之间的延迟,而不终止我们的应用程序。

是否可以?如果是,如何?

0 投票
5 回答
27034 浏览

java - 如何立即强制终止 ThreadPoolExecutor 中的所有工作人员

我在TheadPoolExecutor. 我的界面上有一个停止按钮,应该ThreadPoolExecutor立即终止里面的所有线程。我正在寻找一种方法来做到这一点。(没有shutDown()shutDownNow())。

谢谢

0 投票
2 回答
2343 浏览

java - java执行器服务

当我ExecutorService 在 JAVA 中使用以下代码创建时,有人可以解释它是如何ExecutorService工作的吗?

我相信会有一个工作队列,我的 for 循环会Runnable向这个队列添加 500 个任务。现在ExecutorService已经创建了一个包含 400 个线程的线程池。

那么在队列中的这 500 个任务中,队列中的 400 个线程ExecutorService将一次执行这 400 个任务,而剩余的 as slot 被释放?

我的理解正确吗?

0 投票
1 回答
4317 浏览

java - 我的 ThreadPoolExecutor 是否泄漏内存?

我正在使用 a ThreadPoolExecutor来运行任务。后端是 a SynchronousQueue,所以如果 executor 已经在执行任务,它会抛出RejectedExecutionException. 这是一个简单的测试用例:

预期的行为是:执行 worker 并在休眠一秒钟后,打印出 i(表示到目前为止执行 worker 的频率)和自 worker 创建以来的毫秒数。所以我期待:

这在一段时间内工作正常,但几乎在一个小时后:

所以一个worker执行和下一个worker执行之间的时间是20秒(2919->2920)和38秒(2920->2921)等等。一切都变得非常缓慢,jvm 在垃圾收集上花费了大量时间。最后(几天后)我遇到了 OutOfMemoryError。

我在 64 位 Linux 机器上的 Oracle JVM 1.7.0_07 上使用 -Xmx8M 运行它(我假设效果会在更多堆空间后出现)。我会很感激任何指示,但可能我只是错过了显而易见的事情。

0 投票
4 回答
28738 浏览

java - ThreadPoolExecutor 修复了具有自定义行为的线程池

我是这个主题的新手......我正在使用用 Executors.newFixedThreadPool( 10 ) 创建的 ThreadPoolExecutor ,在池已满后,我开始收到 RejectedExecutionException 。有没有办法“强制”执行者将新任务置于“等待”状态,而不是在池被释放时拒绝它并启动它?

谢谢

关于这个 https://github.com/evilsocket/dsploit/issues/159的问题

涉及的代码行https://github.com/evilsocket/dsploit/blob/master/src/it/evilsocket/dsploit/net/NetworkDiscovery.java#L150

0 投票
2 回答
5399 浏览

java - Spring JPA 多线程

我们正在构建一个产品,所以从性能的角度来看,我需要一些帮助。我们正在使用完整的 Spring(MVC、JPA、Security 等)

我们有一个要求,即对于一个特定的流程,可以同时执行 100 个业务规则。可以有n许多这样的流程和业务规则。

这些规则在执行时实际上是从数据库中的表中获取记录,这些也将包含很少的 LAZILY INITIALIZED ENTITIES。

我将Futures/Callables用于多线程目的,但问题是它无法加载 LAZY 变量。它给 Hibernate 加载异常,可能是 TRANSACTIONAL 中的一些问题没有分布在不同的线程中。

请让我知道是否有其他方法可以接近?

0 投票
1 回答
90 浏览

java - Java ExecutorCompletionService 作为 API 响应者

我有一个服务器应用程序,它监听ServerSocket传入的查询。提交查询的客户端希望打开一个到服务器的套接字,将他们的查询传递到上游,然后(可能在很短的一段时间后)从他们用来提交查询的同一个套接字读取对其查询的响应。

为此,我正在尝试使用ExecutorCompletionService. 不同的查询类被传递给不同Callable的 s,但都期望返回 aString作为它们的结果。

在我达到实际尝试回复客户的阶段之前,所有这些都是可以管理的。这些Future对象目前都是 type Future<String>,但我无法将该结果(the String)与适当的Socket.

我的解决方案是让我所有的Callables 都是看起来像Callable<StringSocketPair>的类型;StringSocketPair

但这一切似乎有点奇怪,因为现在我必须将 传递SocketCallable构造函数,以便它可以将它与方法的String结果一起返回call()。所有这些都是为了让我可以将其推String送到Socket另一个轮询线程中ExecutorCompletionService.take()

另一种选择是使用Runnables 而不是Callables 并让每个Runnable任务自己响应Socket,但是由于我有十几种查询类型,每个都有自己的任务对象,我宁愿不必添加respondToClient()一些调用kind 到run()每个任务对象的每个方法的末尾。

对于我认为相当常见的设置,必须有一个更简单的解决方案?