Java队列简介


在现代应用程序开发中,队列是一种常见且强大的数据结构,用于存储和管理待处理的任务序列。结合MySQL数据库,我们可以利用队列实现任务的持久化存储与高效处理。本文将通过四个案例,详细介绍如何在Java中使用队列,并结合MySQL数据库实现数据的存储与检索,涵盖基础队列操作、消息队列、延迟队列以及优先级队列的应用场景。

#### 环境准备

- Java开发环境:确保已安装JDK 8及以上版本。
- MySQL数据库:安装并运行MySQL服务,创建测试数据库。
- 依赖管理:使用Maven或Gradle管理项目依赖,引入JDBC驱动(如mysql-connector-java)。

表结构。

### 1. 基础队列表(queue)

```sql

CREATE TABLE `queue` (`id` INT AUTO_INCREMENT PRIMARY KEY,`item` VARCHAR(255) NOT NULL
);


```

### 2. 消息队列表(假设与基础队列共用,故无需额外创建)

### 3. 延迟队列表(delayed_queue)

```sql
CREATE TABLE `delayed_queue` (`id` INT AUTO_INCREMENT PRIMARY KEY,`task` VARCHAR(255) NOT NULL,`execute_at` TIMESTAMP NOT NULL
);


```

### 4. 优先级队列表(priority_queue)

```sql

CREATE TABLE `priority_queue` (`id` INT AUTO_INCREMENT PRIMARY KEY,`task` VARCHAR(255) NOT NULL,`priority` INT NOT NULL
);


```

请根据实际需求调整字段长度(如VARCHAR长度)和其他约束条件。在实际部署前,确保这些表结构符合你的应用逻辑和数据库设计规范。

#### 1. 基础队列实现

首先,创建一个简单的队列类`MySQLQueue`,用于模拟队列的基本操作,包括入队(enqueue)、出队(dequeue)。```java

import java.sql.*;public class MySQLQueue {private Connection conn;public MySQLQueue(String url, String user, String password) throws SQLException {conn = DriverManager.getConnection(url, user, password);}public void enqueue(String item) {try (PreparedStatement pstmt = conn.prepareStatement("INSERT INTO queue (item) VALUES (?)")) {pstmt.setString(1, item);pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}public String dequeue() {try (Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT item FROM queue LIMIT 1")) {if (rs.next()) {String item = rs.getString("item");deleteFirstItem();return item;}} catch (SQLException e) {e.printStackTrace();}return null;}private void deleteFirstItem() throws SQLException {try (Statement stmt = conn.createStatement()) {stmt.executeUpdate("DELETE FROM queue LIMIT 1");}}
}


```

#### 2. 消息队列案例

在此案例中,我们将实现一个简单消息队列系统,用于异步处理日志记录。

```java

public class MessageQueue {// 使用MySQLQueue实现private final MySQLQueue queue;public MessageQueue(String url, String user, String password) throws SQLException {queue = new MySQLQueue(url, user, password);}public void logMessage(String message) {queue.enqueue(message);System.out.println("消息已入队:" + message);}public void processMessages() {while (true) {String message = queue.dequeue();if (message == null) break;System.out.println("处理消息:" + message);// 这里可以添加实际的处理逻辑}}
}


```

#### 3. 延迟队列

实现一个支持延迟处理的队列,通过在MySQL中存储任务及其执行时间,定时检查并执行到期任务。

```java

public class DelayedQueue {// ...省略连接初始化...public void scheduleTask(String task, long executeAtTimestamp) {try (PreparedStatement pstmt = conn.prepareStatement("INSERT INTO delayed_queue (task, execute_at) VALUES (?, ?)")) {pstmt.setString(1, task);pstmt.setTimestamp(2, new Timestamp(executeAtTimestamp));pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}public void checkAndExecuteTasks() {try (Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT task FROM delayed_queue WHERE execute_at <= NOW()")) {while (rs.next()) {String task = rs.getString("task");System.out.println("执行延迟任务:" + task);// 执行任务逻辑deleteExecutedTask(task);}} catch (SQLException e) {e.printStackTrace();}}private void deleteExecutedTask(String task) throws SQLException {try (PreparedStatement pstmt = conn.prepareStatement("DELETE FROM delayed_queue WHERE task = ?")) {pstmt.setString(1, task);pstmt.executeUpdate();}}
}


```

#### 4. 优先级队列

创建一个优先级队列,根据任务的优先级排序执行。

```java

public class PriorityQueue {// ...省略连接初始化...public void enqueueWithPriority(String task, int priority) {try (PreparedStatement pstmt = conn.prepareStatement("INSERT INTO priority_queue (task, priority) VALUES (?, ?)")) {pstmt.setString(1, task);pstmt.setInt(2, priority);pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}public void processPrioritizedTasks() {try (Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT task FROM priority_queue ORDER BY priority DESC")) {while (rs.next()) {String task = rs.getString("task");System.out.println("执行优先级任务:" + task);// 执行任务逻辑deleteExecutedTask(task);}} catch (SQLException e) {e.printStackTrace();}}// ...省略deleteExecutedTask方法...
}


```

#### 总结

通过以上案例,我们不仅了解了如何在Java中使用队列数据结构,还学习了如何结合MySQL数据库实现队列的持久化存储与高效处理。无论是基础队列操作、消息队列的异步处理、延迟队列的定时任务调度,还是优先级队列的按优先级执行,这些案例均展示了队列在实际开发中的广泛应用和灵活性。请注意,为了简化示例,代码中未包含完整的错误处理和资源管理细节,在生产环境中务必确保资源的妥善管理和异常处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面了字节大模型算法岗,太难了。。。

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

PCM和QAM

PCM&#xff08;脉冲编码调制&#xff09;和QAM&#xff08;正交振幅调制&#xff09;是两种不同的信号调制技术&#xff0c;它们在通信系统中有着不同的应用和特点。 PCM&#xff08;脉冲编码调制&#xff09; 概述 PCM是一种数字信号处理技术&#xff0c;用于将模拟信号转…

ClickHouse实战处理(一):MergeTree表引擎

MergeTree作为家族系列最基础的表引擎&#xff0c;主要有以下特点&#xff1a; 存储的数据按照主键排序&#xff1a;创建稀疏索引加快数据查询速度。支持数据分区&#xff0c;可以通过PARTITION BY语句指定分区字段。支持数据副本。支持数据采样。 一、MergeTree分类和建表参…

[emailprotected](2)核心概念-JSX

目录 1&#xff0c;什么是 jsx2&#xff0c;空标签3&#xff0c;通过大括号使用 js4&#xff0c;防止注入攻击5&#xff0c;元素的不可变性 官方文档 1&#xff0c;什么是 jsx Facebook 起草的 js 扩展语法。本质上是 js 对象&#xff0c;会被 babel 编译&#xff0c;最终转换…

军队仓库管理系统|DW-S301系统特点

部队仓库管理系统DW-S301系统通过数据采集、互联网和物联网技术&#xff0c;实现数字化智能管控&#xff0c;以提高军用物资的仓储准确率和流转率&#xff0c;缩短周转时间&#xff0c;降低库存成本&#xff0c;也有助于消除生产过程中的不确定性。 系统功能&#xff1a;通过部…

web学习笔记(五十六)

目录 1.绑定类名和style 1.1 绑定类名 1.1.1 绑定单个类名 1.1.2 绑定多个类名 1.2 style相关知识 2. vue的响应式原理 3. v-once 4.本地搭建Vue单页应用 4.1 安装Vue脚手架 4.2 安装对应的包文件 4.3 运行项目 1.绑定类名和style 1.1 绑定类名 1.1.1 绑定单个类名…

openstack报错:openstack volume service list The server is currently unavailable.

openstack报错&#xff1a; [rootcontroller ~]# openstack volume service list The server is currently unavailable. Please try again at a later time.<br /><br /> The Keystone service is temporarily unavailable.(HTTP 503)操作&#xff1a;做cinder 报…

计算机网络协议

网络协议 基于TCP的应用层协议 POP3&#xff08;Post Office Protocol 3&#xff09;&#xff1a; 用于支持客户端远程管理服务器上的电子邮件。它支持**“离线”邮件处理**&#xff0c;即邮件发送到服务器上后&#xff0c;一旦邮件被POP3客户端下载到本地计算机&#xff0c;…

NL6621 实现获取天气情况

一、主要完成的工作 1、建立TASK INT32 main(VOID) {/* system Init */SystemInit();OSTaskCreate(TestAppMain, NULL, &sAppStartTaskStack[NST_APP_START_TASK_STK_SIZE -1], NST_APP_TASK_START_PRIO); OSStart();return 1; } 2、application test task VOID TestAp…

【vue3】计算属性 computed 与 lazy

在 Vue 3 中&#xff0c;computed 和 lazy 都是与响应式系统和数据计算相关的概念&#xff0c;但它们具有不同的用途和行为。 computed 计算属性 computed 是 Vue 中的一个核心功能&#xff0c;用于声明依赖于其他响应式数据的计算属性。当计算属性的依赖数据发生变化时&…

Python3.10用Pyinstaller打包exe报错: IndexError: tuple index out of range

使用Python3.10时&#xff0c;Pyinstaller出现IndexError: tuple index out of range错误&#xff0c;部分异常信息如下&#xff1a; .......yield from get_instructions(code_object)File "C:\Program Files\Python\lib\dis.py", line 338, in _get_instructions_…

网页上的超链接复制到Excel中+提取出网址+如何保存

定义 超链接网页标题地址栏 使用的工具 2024年的WPS是不行的&#xff0c; 如果把知乎网页上的超链接复制到WPS中的Excel中&#xff0c;就会丢掉地址&#xff0c;只剩下网页标题 具体操作&#xff08;转载,在Excel2013上验证可行&#xff09; [1]启用【开发工具】&#xff…

Golang net/http标准库常用方法(三)

大家好&#xff0c;针对Go语言 net/http 标准库&#xff0c;将梳理的相关知识点分享给大家~~ 围绕 net/http 标准库相关知识点还有许多章节&#xff0c;请大家多多关注。 文章中代码案例只有关键片段&#xff0c;完整代码请查看github仓库&#xff1a;https://github.com/hltfa…

科技前沿:IDEA插件Translation v3.6 带来革命性更新,翻译和发音更智能!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

python获取安装路径盘符

文章目录 一、前言二、实现方法一、前言 python写的客户端工具需要安装时,可以给用户一个默认的安装路径,如果直接写死个D、E、F盘什么的,那用户可能没有那个盘符,但是如果直接指定系统盘C盘,又不是那么友好,所以默认指定的安装路径应该尽量满足下面的要求: 盘符存在盘…

【MySQL精通之路】系统变量-系统变量权限

系统变量可以具有影响整个服务器操作的全局值&#xff0c;也可以具有仅影响当前会话的会话值&#xff0c;或者两者兼有&#xff1a; 对于动态系统变量&#xff0c;SET语句可用于更改其全局或会话运行时值&#xff08;或同时更改两者&#xff09;&#xff0c;以影响当前服务器实…

spring boot 启动类加载的优化

1减少依赖&#xff0c;不用的依赖去掉&#xff0c; 2、使用自定义配置bean进行加载&#xff0c;减少更多的不必要加载的组件 3、启动spring boot的配置懒加载模式&#xff0c; 4、将需要启动的bean写入到项目中的文件&#xff0c;去加载该目录下的bean文件 5、使用编译时优化&a…

利用天气API接口自己DIY一个预报小管家

天气预报查询API 是一种实用的日常工具&#xff0c;它通过编程方式为开发者提供实时的天气数据。开发者可以通过简单的代码调用&#xff0c;与天气预报服务提供商进行交互&#xff0c;获取特定地区的天气信息&#xff0c;如温度、湿度、风速、风向、降水量等&#xff0c;以及未…

【车载以太网测试从入门到精通】——SOME/IP协议测试

系列文章目录 【车载以太网测试从入门到精通】系列文章目录汇总 文章目录 系列文章目录前言一、SOME/IP时间参数1.INITIAL_DELAY时间2.REPETITIONS_MAX次数3.REPETITIONS_BASE_DELAY时间4.CYCLIC_OFFER_DELAY时间5.TIME_TO_LIVE时间6.SUBSCRIBE_RETRY_DELAY时间二、SOME/IP服务…

【文末附gpt升级方案】TikTok Symphony AI套件:智能视频制作的新篇章

TikTok Symphony AI套件&#xff1a;智能视频制作的新篇章 摘要 随着短视频平台的兴起&#xff0c;视频内容的创作与制作已成为品牌方吸引用户、传递信息的重要手段。TikTok作为全球领先的短视频平台&#xff0c;近日宣布推出Symphony AI套件&#xff0c;旨在通过人工智能技术…