Java线程队列的使用-PriorityBlockingQueue

这篇具有很好参考价值的文章主要介绍了Java线程队列的使用-PriorityBlockingQueue。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PriorityBlockingQueue是一种带优先级的无界阻塞队列,它的元素必须实现Comparable接口,或者在创建时指定一个Comparator对象。它会根据元素的优先级顺序进行排序,优先级高的元素先被获取。

PriorityBlockingQueue可以用于实现优先级任务调度,例如下面的代码创建了一个PriorityBlockingQueue,并向其中添加了四个任务,每个任务有不同的优先级。然后从队列中循环获取任务,并打印出来。

import java.util.concurrent.PriorityBlockingQueue;

// 定义一个任务类,实现Comparable接口
class Task implements Comparable<Task> {
    // 任务名称
    private String name;
    // 任务优先级
    private int priority;

    // 构造方法,传入任务名称和优先级
    public Task(String name, int priority) {
        this.name = name;
        this.priority = priority;
    }

    @Override
    public int compareTo(Task o) {
        // 比较优先级,优先级大的排在前面
        return Integer.compare(o.priority, this.priority);
    }

    @Override
    public String toString() {
        return "Task{" +
                "name='" + name + '\'' +
                ", priority=" + priority +
                '}';
    }
}

public class PriorityBlockingQueueDemo {
    public static void main(String[] args) {
        // 创建一个优先级阻塞队列
        PriorityBlockingQueue<Task> pbq = new PriorityBlockingQueue<>();
        // 向队列中添加四个任务,注意它们的优先级
        pbq.offer(new Task("task1", 5));
        pbq.offer(new Task("task2", 2));
        pbq.offer(new Task("task3", 7));
        pbq.offer(new Task("task4", 3));
        // 从队列中循环获取任务,并打印出来
        while (pbq.size() > 0) {
            try {
                System.out.println(pbq.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

输出结果:

Task{name='task3', priority=7}
Task{name='task1', priority=5}
Task{name='task4', priority=3}
Task{name='task2', priority=2}

可以看到,队列中的任务按照优先级的顺序被获取,即先获取优先级最高的任务,后获取优先级最低的任务。文章来源地址https://www.toymoban.com/news/detail-507535.html

到了这里,关于Java线程队列的使用-PriorityBlockingQueue的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JAVA】提交任务时,线程池队列已满,这时会发生什么

    🍎 个人博客: 个人主页 🏆 个人专栏: JAVA ⛳️   功不唐捐,玉汝于成 目录 前言 正文 抛出异常: 阻塞等待: 丢弃任务: 调整线程池参数: 使用拒绝策略: 结语  我的其他博客   在并发编程中,线程池作为一种重要的资源管理工具,被广泛应用于提高系统性能和响应

    2024年02月20日
    浏览(30)
  • 【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列

    目录 1、单例模式 1.1、饿汉模式 2.1、懒汉模式  2、阻塞队列 2.1、BlockingQueue 阻塞队列数据结构 对框架和设计模式的简单理解就是,这两者都是“大佬”设计出来的,让即使是一个代码写的不太好的“菜鸡程序员”也能写出还可以的代码。 设计模式也可以认为是对编程语言语

    2024年03月23日
    浏览(82)
  • 【Java系列】多线程案例学习——基于阻塞队列实现生产者消费者模型

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得,欢迎大家在评论区交流讨论💌 什么是阻塞式队列(有两点): 第一点:当队列满的时候

    2024年02月04日
    浏览(39)
  • 多线程环境下如何安全的使用线性表, 队列, 哈希表

    内心丰盈者, 独行也如众 使用synchronized锁或者reentrantLock锁 使用CopyOnWriteArrayList(COW写时拷贝)类来代替ArrayList类. 多个线程对CopyOnWriteArrayList里面的ArrayList进行读操作, 不会发生线程安全问题, 不做任何处理 多个线程对CopyOnWriteArrayList里面的ArrayList进行写操作, 会为每个线程创建一

    2024年02月07日
    浏览(47)
  • JavaEE 初阶篇-线程安全的集合类、多线程环境使用 ArrayList、队列、哈希表(HashMap 、ConCurrentHashMap 、HashTable 的区别)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 线程安全的集合类         1.2 线程安全的集合类 - Vector         1.3 线程安全的集合类 - Stack         1.4 线程安全的集合类 - HashTable         2.0 多线程环境使用 ArrayList        

    2024年04月25日
    浏览(39)
  • Java队列-Disruptor 的使用

    一、什么是 Disruptor  从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。 可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是什么。 我们知道 BlockingQueue 是一个 FIFO 队列

    2024年01月18日
    浏览(28)
  • C++多线程学习(九、不安全的队列测试,简单封装线程安全队列)

    目录 不安全的队列测试 简单封装一个线程安全队列 下方是一个简单的程序,但是不安全: 由于代码中的线程t是在后台运行的,所以无法确定线程t是否已经完成了对myQ队列的操作,因此在主线程中处理myQ队列时,可能会出现竞争条件或者数据不一致的情况,导致输出的结果

    2024年02月13日
    浏览(23)
  • Java RabbitMQ消息队列简单使用

    消息队列,即MQ,Message Queue。 消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。

    2024年02月12日
    浏览(46)
  • Java使用Redis实现消息队列

    近期刷Java面试题刷到了“如何使用Redis实现消息队列”,解答如下: 一般使用 list 结构作为队列, rpush 生产消息, lpop 消费消息。当 lpop 没有消息的时候,要适当sleep 一会再重试。若不使用sleep,则可以用指令blpop(该指令在没有消息的时候,它会阻塞住直到消息到来) rp

    2024年02月21日
    浏览(36)
  • C++ 多线程 线程安全队列设计

    这是看《C++并发编程实战》这本书学的,这里我要为这本书辟谣一下,虽然是这本书前面翻译得很烂,但是从第6章开始,应该是换了个人翻译,虽然还是能难懂,但是难懂的是代码逻辑,而不是语言逻辑; 实现,我先说明一下我自己的一个感悟,即对大多数线程错误的感悟

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包