java队列处理高并发_超简单实用的Java并发处理方案

写在前面

本文分享Java中简单实用的并发处理方案,主要以生产者消费者模式为业务处理逻辑,含有部分实际业务代码不便分享还请谅解,在后面提供了方便大家练习的测试代码,感兴趣的小伙伴可以多设想一些场景结合测试代码进行学习。

核心思想

基于BlockingQueue的生产者、消费者模式。这是一个jdk提供的双端队列,支持读写并发,队列默认大小为Integer.MAX_VALUE,也就是只要你有内存即可。

c1e79909f26e91d672128523a615b29c.png

消息接收

消息入队,同时启动消费监听进行消费

7964b03c0c6c1842eec9bf2065c10d05.png

消息消费

从队列中获取消息进行响应的业务逻辑处理

bce37415bf80e3a2f98f9f30023a2b13.png

测试代码

import org.junit.jupiter.api.Test;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;public class MsgUtil { class CurMsgTasks implements Runnable { BlockingQueue blockingQueue; public CurMsgTasks(BlockingQueue blockingQueue) { this.blockingQueue = blockingQueue; } @Override public void run() { try { while (!blockingQueue.isEmpty()) { System.out.println("消费者线程 - " + Thread.currentThread().getName() + "消费消息:" + blockingQueue.take()); } } catch (InterruptedException e) { e.printStackTrace(); } } } class ProMsgTasks implements Runnable { BlockingQueue blockingQueue; public ProMsgTasks(BlockingQueue blockingQueue) { this.blockingQueue = blockingQueue; } @Override public void run() { try { for (int i = 1; i < 11; i++) { System.out.println("生产者线程 - " + Thread.currentThread().getName() + "生产消息:" + i); blockingQueue.put("任务" + i); } } catch (Exception e) { e.printStackTrace(); } } } @Test public void MsgTasks() { // 任务队列 BlockingQueue blockingQueue = new LinkedBlockingQueue<>(); // 消息生产 for (int i = 0; i < 1; i++) { ThreadUtil.getInstance().addTask(new ProMsgTasks(blockingQueue)); } // 消息消费 for (int i = 0; i < 1; i++) { ThreadUtil.getInstance().addTask(new CurMsgTasks(blockingQueue)); } }}

写在最后

代码本身很简单,涉及一些线程相关的基础知识,核心就是BlockingQueue。关于他的一些介绍和常用方法这里就不在赘述,以免浪费大家的时间,感兴趣的小伙伴可自行百度,大致看一样自己试试就明白了,主要是领会其中的原理。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值