gpt4 book ai didi

java - 如何创建从队列执行随机任务的线程池

转载 作者:行者123 更新时间:2023-11-30 05:44:17 25 4
gpt4 key购买 nike

ThreadPool 使用 BlockingQueue 将任务存储在队列中。

我想要执行器从队列中获取随机任务。因此队列中的第一个任务和最后一个任务有相同的机会被取出。

可以这样做吗?

最佳答案

是的,技术上可以实现随机选择下一个任务的线程池。您可以使用调用者提供的队列实例化ThreadPool

虽然对某些人来说这似乎很奇怪(甚至危险或具有颠覆性!)1,但队列不一定是 FIFO。确实是javadoc对于队列状态:

Queues typically, but do not necessarily, order elements in a FIFO (first-in-first-out) manner.

因此,要实现随机线程池行为,您所需要做的就是使用随机选择元素的 take() 实现您自己的 BlockingQueue 类。

或者,@Ben Manes 的想法是使用 PriorityBlockingQueue 并分配随机优先级。 (这更简单,但是保持队列堆化会产生开销:平均为 O(1),但是 O(logN)最坏的情况。)

<小时/>

1 - 实际上,在现实世界中,排队很大程度上是一种社会惯例。有些文化显然不遵循这个惯例;有些文化显然不遵循这个惯例。例如https://www.thelocal.it/20150410/my-italian-habits-that-foreigners-just-dont-get 。相比之下:https://www.standard.co.uk/lifestyle/london-life/british-people-display-amazing-queuing-etiquette-without-being-told-a3528366.html

关于java - 如何创建从队列执行随机任务的线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55115892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com