当前位置:   article > 正文

Java多线程实现发布和订阅_java实现发布订阅模式

java实现发布订阅模式

目录

简介

步骤 1: 定义消息类

步骤 2: 创建发布者

步骤 3: 创建订阅者

步骤 4: 实现发布-订阅模型


前言-与正文无关

        生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡,忘记了停下脚步,感受周围的世界。让我们一起提醒自己,要适时放慢脚步,欣赏生活中的每一道风景,享受与家人朋友的温馨时光,发现那些平凡日子里隐藏的幸福时刻。因为,这些点点滴滴汇聚起来的,才是构成我们丰富多彩生活的本质。希望每个人都能在繁忙的生活中找到自己的快乐之源,不仅仅为了生存而工作,更为了更好的生活而生活。

        送你张美图!希望你开心!

简介

在Java中,实现发布-订阅模型可以通过多种方式完成,包括使用内置的并发工具如BlockingQueue。这里,我们使用LinkedBlockingQueue来演示一个简单的发布-订阅系统,其中发布者将消息放入队列,而订阅者从队列中取出消息进行处理。

步骤 1: 定义消息类

首先,定义一个简单的消息类,用于发布者和订阅者传递消息。

  1. public class Message {
  2. private String content;
  3. public Message(String content) {
  4. this.content = content;
  5. }
  6. public String getContent() {
  7. return content;
  8. }
  9. }

步骤 2: 创建发布者

发布者(Producer)将消息放入共享的BlockingQueue

  1. import java.util.concurrent.BlockingQueue;
  2. public class Producer implements Runnable {
  3. private BlockingQueue<Message> queue;
  4. public Producer(BlockingQueue<Message> q) {
  5. this.queue = q;
  6. }
  7. @Override
  8. public void run() {
  9. // 发送消息
  10. for (int i = 0; i < 10; i++) {
  11. Message msg = new Message("" + i);
  12. try {
  13. Thread.sleep(i);
  14. queue.put(msg);
  15. System.out.println("Produced " + msg.getContent());
  16. } catch (InterruptedException e) {
  17. Thread.currentThread().interrupt();
  18. }
  19. }
  20. // 发送结束消息
  21. Message msg = new Message("exit");
  22. try {
  23. queue.put(msg);
  24. } catch (InterruptedException e) {
  25. Thread.currentThread().interrupt();
  26. }
  27. }
  28. }

步骤 3: 创建订阅者

订阅者(Consumer)从BlockingQueue中取出消息并处理。

  1. import java.util.concurrent.BlockingQueue;
  2. public class Consumer implements Runnable {
  3. private BlockingQueue<Message> queue;
  4. public Consumer(BlockingQueue<Message> q) {
  5. this.queue = q;
  6. }
  7. @Override
  8. public void run() {
  9. try {
  10. Message msg;
  11. // 检查消息内容是否为"exit"
  12. while (!(msg = queue.take()).getContent().equals("exit")) {
  13. Thread.sleep(10);
  14. System.out.println("Consumed " + msg.getContent());
  15. }
  16. } catch (InterruptedException e) {
  17. Thread.currentThread().interrupt();
  18. }
  19. }
  20. }

步骤 4: 实现发布-订阅模型

现在,使用一个LinkedBlockingQueue来连接发布者和订阅者。

  1. import java.util.concurrent.BlockingQueue;
  2. import java.util.concurrent.LinkedBlockingQueue;
  3. public class PubSubService {
  4. public static void main(String[] args) {
  5. // 创建共享的阻塞队列
  6. BlockingQueue<Message> queue = new LinkedBlockingQueue<>();
  7. // 创建并启动发布者和订阅者线程
  8. Thread producerThread = new Thread(new Producer(queue));
  9. Thread consumerThread = new Thread(new Consumer(queue));
  10. producerThread.start();
  11. consumerThread.start();
  12. }
  13. }

在这个简单的发布-订阅模型中,Producer类生成消息并将它们放入队列,而Consumer类从队列中取出并处理这些消息。使用LinkedBlockingQueue使得这个过程在多线程环境中是线程安全的,同时还处理了生产者和消费者的速率不匹配问题。

------------------------------------------与正文内容无关------------------------------------
 如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!作者在这拜谢了!

混口饭吃了!如果你需要Java 、Python毕设、商务合作、技术交流、就业指导、技术支持度过试用期。请在关注私信我,本人看到一定马上回复!

这是我全部文章所在目录,看看是否有你需要的,如果遇到觉得不对地方请留言,看到后我会查阅进行改正。

A乐神-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/472448
推荐阅读
相关标签
  

闽ICP备14008679号