问题标签 [executorservice]

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 投票
11 回答
5279 浏览

java - 500 Worker Threads,什么样的线程池?

我想知道这是否是最好的方法。我有大约 500 个无限期运行的线程,但是 Thread.sleep 在完成一个处理周期后会持续一分钟。

正在执行的代码非常简单,基本上就是这样

对于每个正在运行的任务,我确实需要一个单独的线程,因此更改架构不是一种选择。我尝试使我的 threadPool 大小等于 Runtime.getRuntime().availableProcessors() ,它试图运行所有 500 个线程,但只让它们中的 8 个(4xhyperthreading)执行。其他线程不会投降,让其他线程轮到他们。我尝试输入一个wait()和notify(),但仍然没有运气。如果有人有一个简单的例子或一些提示,我将不胜感激!

好吧,这个设计可以说是有缺陷的。线程实现遗传编程或 GP,一种学习算法。每个线程分析高级趋势做出预测。如果线程完成,则学习将丢失。也就是说,我希望 sleep() 可以让我在一个线程不“学习”的情况下共享一些资源

所以实际的要求是

如何安排保持状态并每 2 分钟运行一次的任务,但控制一次执行的数量。

0 投票
2 回答
4245 浏览

java - thread.start() 和 executor.submit(thread) 的区别

我面临一个关于线程的问题。我有一个实现可运行的类,我可以在该类上使用 thread.start() 方法。我的问题是我还有一门课java.util.concurrent.ExecutorService,我可以在其中调用 executor.submit(thread)..

谁能告诉我thread.start()executor.submit(thread)...有什么区别

0 投票
2 回答
2314 浏览

java - 当 executorservice 关闭()时,运行/阻塞的可运行对象会发生什么

今天发了一个关于线程模式的问题,几乎所有人都建议我看一下ExecutorService。

当我查看 ExecutorService 时,我想我遗漏了一些东西。如果服务有一个正在运行或阻塞的线程,并且有人调用了 ExecutorService.shutdown(),会发生什么。正在运行或阻塞的线程会发生什么?

ExecutorService 是否在终止之前等待这些线程完成?

我问这个的原因是因为很久以前当我涉足 Java 时,他们弃用了 Thread.stop(),我记得停止线程的正确方法是使用信号量并在必要时扩展 Thread:

ExecutorService 如何处理正在运行的线程?

0 投票
3 回答
1975 浏览

java - 停止不被中断的线程

我有一个线程可以从 ObjectInputStream 中读取对象:

readObject 不会抛出 InterruptedException 并且据我所知,当该线程被中断时不会抛出异常。我如何停止这个线程?

0 投票
1 回答
5460 浏览

java - 使用 ScheduledExecutorService 启动和停止计时器

根据我的阅读,ScheduledExecutorService 似乎是在 Java 中启动和停止计时器的正确方法。

我需要移植一些启动和停止计时器的代码。这不是一个周期性定时器。此代码在启动计时器之前停止计时器。所以,实际上每次启动实际上都是一个restart()。我正在寻找使用 ScheduledExecutorService 的正确方法。这是我想出的。寻找我所缺少的东西的评论和见解:

tia, 卢布

0 投票
8 回答
73312 浏览

java - 如何为可调用线程命名?

我正在使用 ExecutorService 线程池执行一个可调用对象。我想给这个线程起个名字。

更具体地说,在旧版本中我这样做了 -

我在 log4j 日志记录中使用线程名称,这对故障排除有很大帮助。现在我正在将我的代码从 Java 1.4 迁移到 Java 1.6。我已经写了这个(如下所示) - 但我不知道如何给这个线程命名。

请给我一些想法来给这个线程命名?

0 投票
16 回答
226165 浏览

java - ExecutorService,如何等待所有任务完成

等待所有任务ExecutorService完成的最简单方法是什么?我的任务主要是计算,所以我只想运行大量的作业——每个核心上一个。现在我的设置如下所示:

ComputeDTask实现可运行。这似乎可以正确执行任务,但代码wait()IllegalMonitorStateException. 这很奇怪,因为我玩了一些玩具示例,它似乎可以工作。

uniquePhrases包含数以万计的元素。我应该使用其他方法吗?我正在寻找尽可能简单的东西

0 投票
6 回答
211486 浏览

java - 如何从线程池中获取线程 ID?

我有一个固定的线程池,我将任务提交到(限制为5 个线程)。如何找出这5 个线程中的哪一个执行我的任务(类似于“线程 #3 of 5正在执行此任务”)?

0 投票
8 回答
61224 浏览

java - 队列满时ThreadPoolExecutor阻塞?

我正在尝试使用 ThreadPoolExecutor 执行大量任务。下面是一个假设的例子:

问题是我很快就得到了一个,java.util.concurrent.RejectedExecutionException因为任务的数量超过了工作队列的大小。但是,我正在寻找的期望行为是让主线程阻塞,直到队列中有空间。实现这一目标的最佳方法是什么?

0 投票
5 回答
26488 浏览

java - 如何在 FutureTask 中捕获异常

在发现在 Java 1.6(以及来自 Eclipse)中FutureTask运行会吞下方法中的异常后,我试图想出一种方法来捕获这些异常,而无需在我的所有实现中添加 throw/catch。Executors.newCachedThreadPool()Runnable.run()Runnable

API 建议重写FutureTask.setException()应该对此有所帮助:

导致此 Future 报告一个 ExecutionException,并将给定的 throwable 作为其原因,除非此 Future 已被设置或已被取消。此方法在计算失败时由 run 方法在内部调用。

然而,这个方法似乎没有被调用(使用调试器运行显示异常被 捕获FutureTask,但setException没有被调用)。我编写了以下程序来重现我的问题:

我的主要问题是:如何捕获 FutureTask 中抛出的异常?为什么不setException叫?

另外我想知道为什么Thread.UncaughtExceptionHandler不使用该机制FutureTask,有什么原因吗?