我正在实现一个线程池机制,在该机制中我想执行具有不同优先级的任务。我希望有一个很好的机制,通过该机制,我可以向服务提交高优先级的任务,并将其安排在其他任务之前。任务的优先级是任务本身的固有属性(无论我对a
Callable
还是a 表示任务Runnable
对我来说都不重要)。
现在,从表面上看,我可以在中使用a
PriorityBlockingQueue
作为任务队列ThreadPoolExecutor
,但是该队列包含Runnable
对象,这些对象可能是也可能不是Runnable
我提交给它的任务。而且,如果我已经提交了Callable
任务,则不清楚如何映射。
有没有办法做到这一点?我真的不愿意为此付出自己的努力,因为那样的话我更容易出错。
(顺便说一句,是的,我知道在这样的情况下,低优先级工作可能会挨饿。加分(?!)对于可以合理保证公平的解决方案)
乍一看,您似乎可以为扩展Runnable
或Callable<T>
和的任务定义接口Comparable
。然后将a打包为ThreadPoolExecutor
一个PriorityBlockingQueue
队列,并且仅接受实现您的接口的任务。
考虑到您的评论后,似乎可以选择一种方法来扩展ThreadPoolExecutor
,并覆盖submit()
方法。请参阅以AbstractExecutorService
查看默认值。他们做的是包裹Runnable
还是Callable
在FutureTask
和execute()
它。我可能会通过编写一个实现ExecutorService
并委托给匿名inner内部的包装器类来实现ThreadPoolExecutor
。将它们包裹在您优先考虑的东西中,以便您Comparator
可以使用它。
我现在根据我的算法更改任务优先级,我想将这些任务交给虚拟机,我如何在cloudsim中完成?
我使用java.util.concurrent.ExecutorService和固定线程池来执行任务列表。我的任务列表通常在80-150个左右,我已经将任何时候运行的线程数限制为10个,如下所示: 我的用例要求即使完成的任务也应该重新提交给ExecutorService,但是只有当所有已经提交的任务都被服务/完成时,才应该再次执行/获取。也就是说,提交的任务基本上应该轮流执行。因此,在这种情况下不
null null
我已经使用ExecutorService实现了超时任务。在下面的方法中,我正在提交超时任务,如果它在给定的时间内超时,我将取消该任务并关闭执行器。 它运行得很好,我没有任何问题。 然而,我想知道这是否是最好的代码设计。我只是想知道如果使用ExecutorService返回的未来是否会更好。submit()获取可调用函数的返回值或超时超时任务。例如 我正在使用JDK7。
问题内容: 我有三个连接的线程,即第二个线程在第一个死后执行。 这是我的代码: 我将如何使用而不是三个线程对象来实现此功能? 问题答案: 如果您想要/需要的是一个接一个地执行一组作业,但要在与主应用程序线程不同的单个线程中执行,请使用。
使用优先队列实现 Stride Scheduling 在上述的实现描述中,对于每一次pick_next函数,我们都需要完整地扫描来获得当前最小的stride及其进程。这在进程非常多的时候是非常耗时和低效的,有兴趣的同学可以在实现了基于列表扫描的Stride调度器之后比较一下priority程序在Round-Robin及Stride调度器下各自的运行时间。考虑到其调度选择于优先队列的抽象逻辑一致,我