Jon*_*Jon 8 java multithreading
可能重复:
Java执行器:如何设置任务优先级?
我有一个使用LinkedBlockingDequeue构建的ThreadPoolExecutor,我想操纵底层队列,但是在文档中阅读这个让我非常紧张.
队列维护
方法getQueue()允许访问工作队列以进行监视和调试.强烈建议不要将此方法用于任何其他目的.当大量排队的任务被取消时,两个提供的方法remove(java.lang.Runnable)和purge()可用于协助存储回收.
具体来说,我希望能够
谢谢
getQueue()将始终返回BlockingQueue<Runnable>您传递到ThreadPoolExecutor.
文档的担忧是,如果不能保证BlockingQueue. 如果你使用PriorityBlockingQueue, 并且只使用removeand add(或者更直接地,offer),那么你将是安全的,你甚至可以直接从getQueue().
换句话说,每当您的信号告诉您 someRunnable的优先级已更改时,您就应该remove检查删除的结果(true如果已删除),并且只有当它确实被删除时,您才应该重新添加它。您不能保证在这些操作之间不会拾取某些内容,但至少可以保证您不会重复运行,如果使用-> ->Runnable完成,则很容易发生这种情况。containsremoveadd
或者,您也可以编写自己的 a 实现BlockingQueue,该实现使用 a Comparator(如PriorityBlockingQueue),每当请求新数据时都会找到最高优先级。考虑到涉及的各种接口,这听起来需要做更多的工作。
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |