【发布时间】:2017-06-19 20:08:25
【问题描述】:
这是我的情况:
- 我有几个线程应该做后台工作,最好是使用 ThreadPool/ExecutorService 等
- 有很多 Runnables 定期生成调用一个长方法。它们应该由后台工作人员处理。
- runnables 有一个执行顺序(大约)。有趣的是:排序是动态的,随时可能发生变化。因此,应该尽可能晚地决定下一个运行哪个可运行,直接在运行之前。
- 应该可以停止所有当前工作的可运行文件。如果无法做到这一点,则应通知他们,以便他们在完成工作后放弃工作。
我真的不知道如何解决这个问题,而且我对多线程和 Java 的 API 也不是很熟悉。
关于订购
我的意思是按顺序大约:如果他们按顺序开始,那就足够了。每个 Runnable 都在地图的瓦片上做一些工作。这个想法是以这样一种方式对runnables进行排序,首先加载用户正在查看的位置附近的瓷砖,然后再加载周围环境。请注意,因此执行顺序可能随时更改。
【问题讨论】:
-
某种类型的优先队列,也许?
-
如果您需要
Runnables 才能按顺序运行,那么为什么要并行运行它们呢? -
@Hovercraft Full Of Eels 是否允许 PriorityQueues 允许 Comparator 的排名突然改变?
-
@tsolakp 应该按顺序大约运行。订购的越多越好。
-
“大约按顺序”是什么意思?如何判断近似误差何时过大?如果需要任何订单,那么为什么要并行运行它们呢?每个流程的某些部分是否依赖于其他部分?流要么是串行的,要么是并行的,永远不会是微弱的。那么哪些部分是哪些呢?编写某种门,强制相关流等待它们的先决条件。
标签: java multithreading concurrency