草庐IT

ThreadPoolTaskExecutor和ThreadPoolExecutor

全部标签

java - 如果需要处理的数据太多,如何让 ThreadPoolExecutor 命令等待?

我正在从队列服务器获取数据,我需要处理它并发送确认。像这样:while(true){queueserver.get.dataThreadPoolExecutor//senddatatothreadqueueserver.acknowledgement我不完全理解线程中发生了什么,但我认为这个程序获取数据,将其发送给线程,然后立即确认它。因此,即使我限制每个队列只能有200个未确认的项目,它也会尽可能快地接收它。当我在单个服务器上编写程序时,这很好,但如果我使用多个工作程序,那么这就会成为一个问题,因为线程队列中的项目数量不是它完成工作的反射(reflect),而是它有多快可以从队列服务

java - 如何立即强制终止 ThreadPoolExecutor 中的所有 worker

我在TheadPoolExecutor中有许多任务。我的界面上有一个停止按钮,它应该立即终止ThreadPoolExecutor中的所有线程。我正在寻找一种方法来做到这一点。(没有shutDown()或shutDownNow())。谢谢 最佳答案 您不能安全地立即终止线程。您的任务应该尊重中断并在被中断时停止。如果使用ThreadPoolExecutor.shutdownNow(),所有正在运行的任务都会被中断。唯一的替代方法是向单独进程中的线程发出信号以终止进程。 关于java-如何立

Java - ThreadPoolExecutor线程池分析

Java- ThreadPoolExecutor源码分析 1.为什么要自定义线程池首先ThreadPoolExecutor中,一共提供了7个参数,每个参数都是非常核心的属性,在线程池去执行任务时,每个参数都有决定性的作用。但是如果直接采用JDK提供的方式去构建,可见设置的核心参数最多就两个,这样就会导致对线程池的控制粒度很粗。所以在阿里规范中也推荐自己创建自定义线程池。自定义构建线程池,可以细粒度的控制线程池,去管理内存的属性,并且针对一些参数的设置可能更好的在后期排查问题。ThreadPoolExecutor七大核心参数:publicThreadPoolExecutor(intcorePoo

java - ThreadPoolExecutor 政策

我正在尝试使用ThreadPoolExecutor来安排任务,但在其策略方面遇到了一些问题。这是其声明的行为:如果运行的线程少于corePoolSize,执行器总是倾向于添加新线程而不是排队。如果corePoolSize或更多线程正在运行,则执行器总是更喜欢排队请求而不是添加新线程。如果请求无法排队,则会创建一个新线程,除非这会超过maximumPoolSize,在这种情况下,任务将被拒绝。我想要的行为是这样的:同上如果有超过corePoolSize但少于maximumPoolSize的线程在运行,则优先添加新线程而不是排队,使用空闲线程而不是添加新线程。同上基本上我不希望任何任务被拒

java - 任务 com.google.firebase.a.v 被 java.util.concurrent.ThreadPoolExecutor 拒绝

friend,我想知道这个错误。我在Android中使用Firebase。完整的错误是:FatalException:java.util.concurrent.RejectedExecutionExceptionTaskcom.google.firebase.a.v@61b9a00rejectedfromjava.util.concurrent.ThreadPoolExecutor@eacc239[Running,poolsize=2,activethreads=2,queuedtasks=128,completedtasks=0]错误发生在Fragment内的DataChange上,

java - 将 InheritableThreadLocal 与 ThreadPoolExecutor 一起使用——或者——不重用线程的 ThreadPoolExecutor

我正在尝试同时使用InheritableThreadLocal和ThreadPoolExecutor。这是因为ThreadPoolExecutor为每个池重用线程(毕竟它是一个池),这意味着InheritableThreadLocal没有按预期工作。现在这个问题对我来说似乎很明显,但追踪起来特别麻烦。我使用InheritableThreadLocal这样几个顶级进程中的每一个都有自己的数据库连接,用于它自己和它产生的任何子进程。我不只是使用一个共享连接池,因为每个顶级进程在提交到数据库和/或准备大量反复使用的PreparedStatements之前,都会对其连接进行大量多步骤工作。我在

java - 处理 ThreadPoolExecutor 的异常

我有以下代码片段,基本上扫描需要执行的任务列表,然后将每个任务交给执行程序执行。JobExecutor依次创建另一个执行器(用于执行数据库操作......读取数据并将数据写入队列)并完成任务。JobExecutor返回Future对于提交的任务。当其中一项任务失败时,我想优雅地中断所有线程并通过捕获所有异常来关闭执行程序。我需要做哪些改变?publicclassDataMovingClass{privatestaticfinalAtomicIntegeruniqueId=newAtomicInteger(0);privatestaticfinalThreadLocaluniqueNum

java - 具有无界队列的 ThreadPoolExecutor 不创建新线程

我的ThreadPoolExecutor无法创建新线程。事实上,我写了一个有点老套的LinkedBlockingQueue,它将接受任何任务(即它是无界的)但调用一个额外的处理程序-在我的应用程序中发出警告跟踪池在后面-这给了我非常明确的TPE拒绝创建新线程的信息,即使队列中有数千个条目也是如此。我的构造函数如下:privatefinalExecutorServices3UploadPool=newThreadPoolExecutor(1,40,1,TimeUnit.HOURS,unboundedLoggingQueue);为什么不创建新线程? 最佳答案

java - 为什么 ThreadPoolExecutor 的参数是 BlockingQueue?

我尝试使用创建和执行ThreadPoolExecutorintpoolSize=2;intmaxPoolSize=3;ArrayBlockingQueuequeue=newArrayBlockingQueue(2);如果我连续尝试第7、8...个任务threadPool.execute(task);队列达到最大大小后它开始抛出“RejectedExecutionException”。意味着我失去了添加这些任务。那么这里BlockingQueue如果缺少任务,它的作用是什么?意思是为什么它不等待?来自BlockingQueue的定义AQueuethatadditionallysuppor

python - 从 concurrent.futures 使用 ThreadPoolExecutor 时的 max_workers 数量?

在从concurrent.futures中决定将max_workers设置为什么时,需要考虑哪些因素?只要您期望Python3.5+可用,是否有任何理由不将max_workers设置为None,这将“默认为机器上的处理器数量,乘以5”,如此处文档中所述?https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor 最佳答案 我不认为这个问题可以如此普遍地解决;这将取决于每个案例。来自thisanswer: