`
thinkact
  • 浏览: 83490 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

优先级的队列任务调度

    博客分类:
  • Java
阅读更多

使用java.util.concurrent 包,让我们有了一个快捷的的方式实现多线程调度。

在一个项目中要实现一个带优先级的的线程调度,可是Thread的priority属性并不能保证优先级高的线程对象优先调度

我选用的PriorityBlockingQueue来实现。PriorityBlockingQueue是个排序队列,要求放入的对象是可以排序的才行

 

第一步: 实现可排序的线程类

 如:

 public class TargetThread extends Thread implements Comparable<TargetThread>{

  

  private Integer targetId;
  private int frequency;  //频率高的要先运行

 /**
   * Override equals 方法,以便于在TargetTable里的set里避免重复对象
   */
  public boolean equals(Object obj) {
   TargetThread oo = (TargetThread) obj;
   return (oo.getTargetId().intValue() == this.targetId.intValue());
  }

/**

* 排序比较频率高

*/

 public int compareTo(TargetThread t) {
  if(this.frequency < t.frequency) return -1;
  if(this.frequency > t.frequency) return 1;
  return 0;
 }

public void run() {

// do something

}

 }

 

第二步: 把执行的线程放入PriorityBlockingQueue中,项目要执行的线程在某个时刻可能上千个,这时放入队列后,频率高的就会排在前面,而不是先进先出了。

 

第三步:执行队列里的线程

TargetThread t = PriorityBlockingQueue.poll();

t.start();

 

这样,一个带优先级的队列就实现了,具体在调度的时候,还可以使用concurrent的Executor来run一个线程对象。

 

 

 

分享到:
评论
2 楼 thinkact 2008-12-03  
icefishc 写道

Hello,我对您的第三步有些疑问.按照我的理解t.start(); 只是告诉JVM t可以start了, 并不表明t真的就start了请问您是否能解释一下呢? 谢谢。

是的,实际应用中我还做了一个最大活动线程数控制,这样保证从队列里拿出来要执行的对象是优先级较高的。
1 楼 icefishc 2008-12-03  
Hello,
我对您的第三步有些疑问.
按照我的理解t.start(); 只是告诉JVM t可以start了, 并不表明t真的就start了
请问您是否能解释一下呢? 谢谢。

相关推荐

    优先级队列

    优先级队列在实际应用中非常广泛,如在事件驱动的系统中调度事件、在图形渲染中决定物体的渲染顺序,或者在Dijkstra算法和Prim算法等图论算法中寻找最小或最大权重的边。理解并熟练运用优先级队列,对提升编程效率和...

    优先级队列(堆实现)

    例如,我们可以用优先级队列来实现一个简单的任务调度器,优先处理优先级高的任务。 总之,`PriorityQueue`通过堆数据结构提供了高效、灵活的优先级管理功能。在理解和使用过程中,应充分考虑其特性,以便在需要...

    os.rar_优先级 队列

    这个文件可以帮助我们进一步理解在实际操作系统的实现中,如何处理优先级队列调度的复杂性。 总的来说,"os.rar_优先级 队列"的主题涉及了操作系统如何通过优先级队列优化进程调度,确保系统性能和响应速度。通过...

    Java队列源码-simulation-queue-priory-pso:文章“队列优先级优化算法:用于集成过程的新颖任务调度”的源代码(Ja

    在这个上下文中,PSO可能被用来优化任务调度策略,动态调整任务在优先级队列中的位置,以达到更高的效率。 源代码的目录结构可能包括以下几个部分: 1. `Simulation`: 模拟环境的实现,包含了任务调度的逻辑和...

    PriorityQueue-MEX-Matlab 优先级队列 matlab

    在计算机科学中,优先级队列通常用于调度任务、事件处理和其他需要快速访问最高优先级元素的场景。在MATLAB环境中,由于其内置的数据结构并不直接支持高效优先级队列操作,因此常常通过编写MEX文件来实现这一功能。 ...

    C++进程优先级调度进程优先级调度进程优先级调度

    InsertPrio函数用于创建优先级队列,规定优先数越小,优先级越高。InsertTime函数用于创建时间片队列,InsertFinish函数用于创建完成队列。 在PrioCreate函数中,我们使用了scanf函数来输入进程的信息,并将其加入...

    毕业设计MATLAB_优先级队列.zip

    例如,在模拟调度系统中,任务可以根据它们的截止时间或紧急程度被赋予不同的优先级,优先级队列可以帮助高效地安排执行顺序。在图算法中,可以使用优先级队列来存储待处理的节点,优先级依据节点的权重或距离来设定...

    优先级队列的C++实现

    总结,C++中的优先级队列提供了一种高效处理具有优先级的元素的方式,特别适用于需要按优先级处理任务的场景,如服务器应用中的任务调度。通过自定义容器和比较器,我们可以灵活地调整队列的行为以满足特定需求。在...

    多队列动态优先级的调度C实现算法

    多队列调度算法基于一个核心概念:将待处理的任务分配到多个独立的队列中,每个队列代表一种特定的优先级或任务类型。这样的设计允许系统根据任务的特性进行差异化处理,比如高优先级的任务可能被分配到一个队列,而...

    第10章-优先级队列1

    优先级队列可以用来解决许多实际问题,如任务调度、资源分配等。 本章主要介绍了优先级队列的实现,包括无序列表、有序列表、无序向量和有序向量四种实现方法。并且还讨论了如何使 getMax() 接口的效率提升到 O(1)...

    多级反馈队列调度算法实现

    多级反馈队列调度算法(Multilevel Feedback Queue Scheduling,MLFQ)是一种常见的操作系统进程调度策略,它结合了时间片轮转和优先级调度的优点,以优化系统的响应时间和周转时间。在深入探讨MLFQ的实现之前,我们...

    基于优先级队列的分布式多主题爬虫.pdf

    综上所述,基于优先级队列的分布式多主题爬虫调度算法PQMCSA,通过采用先进的哈希算法和优先级队列策略,有效改善了分布式爬虫在多主题任务爬取中的资源调度问题,显著提升了爬虫系统的性能。这项技术不仅适用于搜索...

    优先级队列的运用。。

    通过以上分析可以看出,优先级队列是一种非常有用的数据结构,可以在很多算法和实际问题中找到它的应用,比如在任务调度、事件驱动模拟等方面。同时,优先级队列的灵活性也体现在它可以很容易地支持各种数据类型,并...

    基于双优先级队列的异构分布式控制系统容错调度算法 (2008年)

    为了调度多种实时性的任务,提出了双优先级队列调度算法,用于调度每个处理器上的任务。该算法设置2个优先级队列,其中高优先级队列用于调度实时任务,低优先级队列用于调度非实时任务,高优先级队列中的任务可抢占...

    chapter_9_优先级队列.zip

    这种数据结构常用于调度任务、事件驱动编程、图形算法(如Dijkstra算法)等场景。 Python的`heapq`模块提供了对优先级队列的支持。它基于堆数据结构实现,堆是一种近似完全二叉树的结构,满足堆属性:父节点的键值...

    一种基于YARN的高优先级作业调度实现方案

    针对这个问题,本文提出的高优先级作业调度方案,通过在YARN中集成一个专门的高优先级队列,并赋予该队列上的作业优先级,使得这些作业能够被优先考虑,从而改善了在资源紧张时,高优先级作业难以获得足够资源的问题...

    动态优先级队列的离散时间排队分析

    动态优先级队列结合离散时间下的D-MAP/PH/1模型和QLT调度策略,为多媒体网络中的服务质量提供了有力支持。通过对该模型的稳态分布进行深入分析,我们能够更准确地评估网络性能,优化资源配置,提升用户体验。未来的...

    智能变电站通信业务优先级及其队列调度方法.docx

    然而,在实际工程实践中,通常只采用两级优先级,将GOOSE和SV分组承载的业务设定为高优先级4,而其他业务则被设定为低优先级1,并使用严格的优先级队列(SPQ)调度算法。这种简单分级和调度策略无法针对不同类型的...

    nachos基于优先级的线程调度实验

    此外,为了保证调度的公平性和效率,可能需要实现一种高效的优先级队列数据结构,例如堆,它可以在线性时间内完成调整。 在实现过程中,你还需要处理一些特殊情况,如优先级反转和优先级继承等,这些都是多线程环境...

    模拟进程优先级调度算法

    通常会有一个高优先级队列和一个低优先级队列,当高优先级队列为空时,才会从低优先级队列中选取进程进行调度。 ### 算法优缺点 #### 优点 - **响应时间短**:高优先级的进程可以更快地得到处理,适合于实时系统...

Global site tag (gtag.js) - Google Analytics