gpt4 book ai didi

Java - 信号量中的优先级

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:20 24 4
gpt4 key购买 nike

我有多个线程访问外部资源——浏览器。但是一次只有一个线程可以访问它。所以,我使用信号量来同步它们。但是,一个从 GUI 获取输入然后访问浏览器获取结果的线程应该优先于其他线程,我不确定如何使用信号量来实现它。

我在想,每个线程在获取到信号量后,都会检查队列中是否有优先级线程在等待,如果有,就释放它,重新等待。只有优先级线程获取后不释放。

这是一个很好的解决方案还是我可以使用 Java API 中的其他任何内容?

最佳答案

Java 中没有同步原语可以让您以您想要的方式将一个线程优先于其他线程。

但是您可以使用另一种方法来解决您的问题。不是同步线程,而是让它们产生小任务(例如,Runnable 对象)并将这些任务放入 PriorityBlockingQueue 中,其中 GUI 线程的任务具有最高优先级。单个工作线程将从该队列中轮询任务并执行它们。这将保证互斥和优先排序。

ThreadPoolExecutor 中有接受阻塞队列的特殊构造函数。因此,您所需要的只是这样一个执行器,它带有一个随您的 PriorityBlockingQueue<Runnable> 一起提供的线程。然后将你的任务提交给这个执行器,它会处理剩下的事情。

如果您决定选择这种方法,您可能会对这篇文章感兴趣:How to implement PriorityBlockingQueue with ThreadPoolExecutor and custom tasks

关于Java - 信号量中的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437411/

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