jjzjj

ThreadPoolExecutor

全部标签

Java 程序用完 RAM 但不是真的

我在IntelliJ中为这个实验运行我的应用程序,它因以下错误而崩溃:java.lang.OutOfMemoryError:unabletocreatenewnativethreadatjava.lang.Thread.start0(NativeMethod)atjava.lang.Thread.start(Thread.java:717)atjava.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957)atjava.util.concurrent.ThreadPoolExecutor.pro

java - 重写 ThreadPoolExecutor afterExecute 方法 - 有什么缺点吗?

钩子(Hook)方法的优点:beforeExecute(Thread,Runnable)和afterExecute(Runnable,Throwable)beforeExecute(Thread,Runnable)andafterExecute(Runnable,Throwable)methodsthatarecalledbeforeandafterexecutionofeachtask.Thesecanbeusedtomanipulatetheexecutionenvironment;forexample,reinitializingThreadLocals,gatheringsta

java - 更改 ThreadPoolExecutor 的队列大小

我需要能够更改ThreadPoolExecutor任务队列的大小.当然,BlockingQueue不支持改变大小,ThreadPoolExecutor也不支持改变队列。所以,我想出的方法是使用ThreadPoolExecutor.shutdownNow(),这会返回一个尚未执行的Runnable列表。然后我可以创建一个具有所需队列大小的新执行程序并重新提交所有任务。问题在于调用shutdownNow()时正在进行的任务。据我从javadoc中得知,执行程序将在当前执行任务的所有线程上调用Thread.interrupt()。我不希望我的任务被杀死。这个问题可能是询问如何编写我的任务以使

java - 列出 ThreadPoolTask​​Executor 中所有正在运行/排队的线程

我在Spring中使用ThreadPoolTask​​Executor来安排我的任务。有没有办法获取该任务执行器/池的每个正在运行和排队的线程的列表或其他信息? 最佳答案 也许不是很优雅,但通过这种方式我可以从已知的执行器中获取所有线程(使用startsWith()前缀)。SetthreadSet=Thread.getAllStackTraces().keySet();for(Threadthread:threadSet){if(thread.getName().startsWith("MyExecutor")){System.ou

java - maven 在项目构建期间挂起约 20 分钟(过去工作正常)

构建这个maven项目曾经在很长一段时间(6个月)内工作得很好,但今天在执行mvncleaninstall时,构建每次都开始挂起(尝试使用不同版本的mvn,包括最新的3.5.0并且针对openJDK和OracleJDK-结果是一样的)kill-3PID输出"resolver-5"#491daemonprio=5os_prio=0tid=0x00007f6da8bd3800nid=0x16b3waitingoncondition[0x00007f6d68df3000]java.lang.Thread.State:WAITING(parking)atsun.misc.Unsafe.park

java - 如何在 Java 中使用 ThreadPoolExecutor 处理 RejectedExecutionException

在Java中使用ThreadPoolExecutor时,处理RejectedExecutionException的最佳方法是什么?我想确保提交的任务不应该被忽视并且应该被执行。截至目前,完成任务没有硬性实时要求。我认为可以做的一件事是在一个循环中等待,直到我知道可运行队列中有空间,然后继续并将其添加到队列中。如果人们可以分享他们的经验,我们会很高兴。添加我想到的可能的解决方案:while(executor.getQueue().remainingCapacity 最佳答案 我会改变你队列的行为。例如publicclassMyBloc

Java ThreadPoolExecutor 策略, 'Direct Handoff' 带队列?

我希望有一个ThreadPoolExecutor,我可以在其中设置一个corePoolSize和一个maximumPoolSize,然后队列将切换任务立即进入线程池,从而创建新线程,直到达到maximumPoolSize,然后开始添加到队列中。有这样的事吗?如果没有,它没有这样的策略有什么充分的理由吗?我本质上想要的是提交任务执行,当它达到一个点,它基本上会因为有太多线程(通过设置maximumPoolSize)而获得“最差”性能时,它将停止添加新线程并且使用该线程池并开始排队,然后如果队列已满则拒绝。当负载回落时,它可以开始将未使用的线程拆除回corePoolSize。在我的申请中,

java - 使用 ArrayBlockingQueue 会使进程变慢

我最近刚刚将ArrayBlockingQueue用于我的多线程进程。但它似乎放慢了速度而不是加速了。你们能帮帮我吗?我基本上是导入一个文件(大约30万行)并解析它们并将它们存储在数据库中publicclassCellPool{privatestaticclassRejectedHandlerimplementsRejectedExecutionHandler{@OverridepublicvoidrejectedExecution(Runnablearg0,ThreadPoolExecutorarg1){System.err.println(Thread.currentThread()

java - 由 PriorityBlockingQueue 支持的 ThreadPoolExecutor 似乎不起作用

我有大量图片要从服务器获取,我想获取一些优先级高于其他图片的图片,所以我实现了自己的ThreadPoolExecutor返回一个FutureTask实现了Comparable但它似乎不起作用。这些任务或多或少按照我将它们添加到队列的顺序进行处理。我已经调试了ThreadPoolExecutor的BlockingQueue并发现当我添加具有更高优先级的Runnable时,它并没有转移所有排在队列的顶部。这是代码publicclassPriorityThreadPoolExecutorextendsThreadPoolExecutor{publicPriorityThreadPoolExe

Java ExecutorService 和 ThreadPoolExecutor

我遇到了一个奇怪的问题。我正在尝试使用生产者/消费者模型,如果我在这里做错了什么,请提出建议。当我使用固定线程4的ExecutorService时,我从来没有得到任何异常并且程序运行但是当我使用ThreadPoolExecutor时,它给了我异常。无法找出错误是什么!请指教!ExecutorService代码:ArrayBlockingQueuelist=newArrayBlockingQueue(2);ThreadFactorythreadFactory=Executors.defaultThreadFactory();ExecutorServicethreadPool=Execut