锁定老帖子 主题:优先级的队列任务调度
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-02
使用java.util.concurrent 包,让我们有了一个快捷的的方式实现多线程调度。 在一个项目中要实现一个带优先级的的线程调度,可是Thread的priority属性并不能保证优先级高的线程对象优先调度 我选用的PriorityBlockingQueue来实现。PriorityBlockingQueue是个排序队列,要求放入的对象是可以排序的才行
第一步: 实现可排序的线程类 如: public class TargetThread extends Thread implements Comparable<TargetThread>{
private Integer targetId; /** /** * 排序比较频率高 */ public int compareTo(TargetThread t) { public void run() { // do something } }
第二步: 把执行的线程放入PriorityBlockingQueue中,项目要执行的线程在某个时刻可能上千个,这时放入队列后,频率高的就会排在前面,而不是先进先出了。
第三步:执行队列里的线程 TargetThread t = PriorityBlockingQueue.poll(); t.start();
这样,一个带优先级的队列就实现了,具体在调度的时候,还可以使用concurrent的Executor来run一个线程对象。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-03
Hello,
我对您的第三步有些疑问. 按照我的理解t.start(); 只是告诉JVM t可以start了, 并不表明t真的就start了 请问您是否能解释一下呢? 谢谢。 |
|
返回顶楼 | |
发表时间:2008-12-03
icefishc 写道 Hello,我对您的第三步有些疑问.按照我的理解t.start(); 只是告诉JVM t可以start了, 并不表明t真的就start了请问您是否能解释一下呢? 谢谢。 是的,实际应用中我还做了一个最大活动线程数控制,这样保证从队列里拿出来要执行的对象是优先级较高的。 |
|
返回顶楼 | |
浏览 5362 次