问题标签 [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.
java - 启动新线程而不是放入队列
从 javadoc 为ThreadPoolExecutor
:
当在方法execute(java.lang.Runnable) ...中提交新任务时。如果运行的线程数大于corePoolSize但小于maximumPoolSize,则只有在队列已满时才会创建新线程。
在这种情况下,我怎样才能让它ThreadPool
启动新线程而不是将任务提交到队列?
例子:
我有 corePoolSize=5 和 maxPoolSize=10 的线程和无界队列。
假设corePoolSize线程现在很忙,并且新任务到达 - 池必须启动新线程并执行新任务。
假设maxPoolSize线程现在很忙,并且新任务到达 - 池必须将任务持久化到队列中,并且第一个空闲线程必须接受这个任务并执行。
java - 以非阻塞方式处理文件上传
后台线程在这里
只是为了明确目标 - 用户将上传一个大文件,并且必须立即重定向到另一个页面以进行不同的操作。但是文件很大,从控制器的InputStream读取需要时间。所以我不情愿地决定分叉一个新的线程来处理这个 I/O。代码如下:
控制器小服务程序
模型类
可运行的
我的疑问/疑问:
- 从 Servlet 手动生成线程在逻辑上对我来说是有意义的,但在编码方面让我感到害怕——容器毕竟不知道这些线程(我想是的!)
当前代码给出了一个非常明显的异常 -由于 doPost(...) 方法在 run() 方法完成之前返回,因此无法访问流:
/li>请记住第 1 点,无论如何使用 Executor 框架对我有帮助吗?
/li>
那么我应该如何确保用户不会阻塞并且流仍然可以访问,以便可以从中读取(上传的)文件?
java - 在 Java 中指定任务顺序执行
我搜索了很多,但找不到任何解决方案。我以这种方式使用java线程池:
以这种方式,任务按顺序执行(如队列中)。但我需要更改“选择下一个任务”策略。所以我想为每个任务指定优先级(它不是线程优先级)并执行对应于这些优先级的任务。因此,当执行者完成另一个任务时,它会选择下一个任务作为具有最高优先级的任务。它描述了常见问题。也许有更简单的方法不考虑优先级。它选择最后添加的任务作为下一个执行而不是第一个添加的任务。粗略地说 FixedThreadPool 使用 FIFO 策略。我可以使用例如 LIFO 策略吗?
java - 在不终止服务的情况下更改 ScheduledThreadPoolExecutorService 的延迟
顾名思义,我们有一个守护进程框架,它使用 Executor 服务来调度守护进程。
在运行时,我想更改两次运行Runnable
类之间的延迟,而不终止我们的应用程序。
是否可以?如果是,如何?
java - 如何立即强制终止 ThreadPoolExecutor 中的所有工作人员
我在TheadPoolExecutor
. 我的界面上有一个停止按钮,应该ThreadPoolExecutor
立即终止里面的所有线程。我正在寻找一种方法来做到这一点。(没有shutDown()
或shutDownNow()
)。
谢谢
java - java执行器服务
当我ExecutorService
在 JAVA 中使用以下代码创建时,有人可以解释它是如何ExecutorService
工作的吗?
我相信会有一个工作队列,我的 for 循环会Runnable
向这个队列添加 500 个任务。现在ExecutorService
已经创建了一个包含 400 个线程的线程池。
那么在队列中的这 500 个任务中,队列中的 400 个线程ExecutorService
将一次执行这 400 个任务,而剩余的 as slot 被释放?
我的理解正确吗?
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 运行它(我假设效果会在更多堆空间后出现)。我会很感激任何指示,但可能我只是错过了显而易见的事情。
java - ThreadPoolExecutor 修复了具有自定义行为的线程池
我是这个主题的新手......我正在使用用 Executors.newFixedThreadPool( 10 ) 创建的 ThreadPoolExecutor ,在池已满后,我开始收到 RejectedExecutionException 。有没有办法“强制”执行者将新任务置于“等待”状态,而不是在池被释放时拒绝它并启动它?
谢谢
java - Spring JPA 多线程
我们正在构建一个产品,所以从性能的角度来看,我需要一些帮助。我们正在使用完整的 Spring(MVC、JPA、Security 等)
我们有一个要求,即对于一个特定的流程,可以同时执行 100 个业务规则。可以有n
许多这样的流程和业务规则。
这些规则在执行时实际上是从数据库中的表中获取记录,这些也将包含很少的 LAZILY INITIALIZED ENTITIES。
我将Futures
/Callables
用于多线程目的,但问题是它无法加载 LAZY 变量。它给 Hibernate 加载异常,可能是 TRANSACTIONAL 中的一些问题没有分布在不同的线程中。
请让我知道是否有其他方法可以接近?
java - Java ExecutorCompletionService 作为 API 响应者
我有一个服务器应用程序,它监听ServerSocket
传入的查询。提交查询的客户端希望打开一个到服务器的套接字,将他们的查询传递到上游,然后(可能在很短的一段时间后)从他们用来提交查询的同一个套接字读取对其查询的响应。
为此,我正在尝试使用ExecutorCompletionService
. 不同的查询类被传递给不同Callable
的 s,但都期望返回 aString
作为它们的结果。
在我达到实际尝试回复客户的阶段之前,所有这些都是可以管理的。这些Future
对象目前都是 type Future<String>
,但我无法将该结果(the String
)与适当的Socket
.
我的解决方案是让我所有的Callable
s 都是看起来像Callable<StringSocketPair>
的类型;StringSocketPair
但这一切似乎有点奇怪,因为现在我必须将 传递Socket
给Callable
构造函数,以便它可以将它与方法的String
结果一起返回call()
。所有这些都是为了让我可以将其推String
送到Socket
另一个轮询线程中ExecutorCompletionService.take()
。
另一种选择是使用Runnable
s 而不是Callable
s 并让每个Runnable
任务自己响应Socket
,但是由于我有十几种查询类型,每个都有自己的任务对象,我宁愿不必添加respondToClient()
一些调用kind 到run()
每个任务对象的每个方法的末尾。
对于我认为相当常见的设置,必须有一个更简单的解决方案?