【Kotlin 协程】Channel 通道 ⑤ ( BroadcastChannel 广播通道 | 代码示例 )

news/2024/5/19 20:20:29/文章来源:https://blog.csdn.net/han1202012/article/details/128465979

文章目录

  • 一、BroadcastChannel 广播通道
  • 二、代码示例





一、BroadcastChannel 广播通道



在之前的博客中 介绍的 Channel 通道数据发送协程 ( 生产者 )数据接收协程 ( 消费者 ) 数据接收 都是一对一的 ,

生产者 发送一个数据 , 消费者 只能接收一个数据 ,

如果有 多个 消费者协程 , 这个 数据谁抢到就算谁的 , 其它消费者无法再次获取相同的数据 ,

多个 消费者协程 之间接收的数据 , 存在互斥 ;


BroadcastChannel 广播通道 发出的数据 , 可以同时被多个 消费者协程 接收 , 互相之间不存在互斥行为 ;





二、代码示例



代码示例 : 在 生产者协程 中 , 通过 BroadcastChannel 发送数据 , 启动 3 个 消费者协程 , 同时接收 BroadcastChannel 的数据 , 3 个协程中都可以获取完整的数据 ;

package kim.hsl.coroutineimport android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.BroadcastChannel
import kotlinx.coroutines.channels.Channelclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)runBlocking {// BroadcastChannel 广播通道, 传递 Int 类型数据val broadCastChannel = BroadcastChannel<Int>(Channel.BUFFERED)// 数据生产者协程val producer = GlobalScope.launch {for (i in 0..2) {delay(100)broadCastChannel.send(i)println("向通道中发送数据 $i")}// 关闭通道broadCastChannel.close()}List(3) { index ->// 数据消费者协程GlobalScope.launch {val channel = broadCastChannel.openSubscription()for (num in channel) {delay(1000)println("消费者协程 $index 从通道中接收数据 $num")}}}.joinAll()}}
}

执行结果 :

2022-12-28 11:33:45.343 I/System.out: 向通道中发送数据 0
2022-12-28 11:33:45.482 I/System.out: 向通道中发送数据 1
2022-12-28 11:33:45.623 I/System.out: 向通道中发送数据 2
2022-12-28 11:33:46.385 I/System.out: 消费者协程 0 从通道中接收数据 0
2022-12-28 11:33:46.388 I/System.out: 消费者协程 2 从通道中接收数据 0
2022-12-28 11:33:46.388 I/System.out: 消费者协程 1 从通道中接收数据 0
2022-12-28 11:33:47.389 I/System.out: 消费者协程 0 从通道中接收数据 1
2022-12-28 11:33:47.390 I/System.out: 消费者协程 2 从通道中接收数据 1
2022-12-28 11:33:47.391 I/System.out: 消费者协程 1 从通道中接收数据 1
2022-12-28 11:33:48.393 I/System.out: 消费者协程 0 从通道中接收数据 2
2022-12-28 11:33:48.393 I/System.out: 消费者协程 2 从通道中接收数据 2
2022-12-28 11:33:48.394 I/System.out: 消费者协程 1 从通道中接收数据 2

在这里插入图片描述

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

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

相关文章

Qt5操作Office及Word读写实例

欢迎小伙伴的点评✨✨&#xff0c;相互学习&#x1f680;&#x1f680;&#x1f680; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精神&#x1f469;‍&#x1f680; 文章目录前言一、Qt操作Office的…

数据结构与算法-java

什么是数组&#xff1f; &#xff08;1&#xff09;数组是计算机中最基本的数据结构之一&#xff0c;我们会用一些名为索引的数字来标识每项数据在数组中的位置。 &#xff08;2&#xff09;大多数编程语言中索引是从0开始的。 &#xff08;3&#xff09;数组在内存中是存在连续…

【真干货】Activiti7工作流如何使用?看这里

一. 前言 近日文哥有个毕业学员在公司开发时遇到了工作流的相关业务场景。在这里&#xff0c;文哥给大家精心准备了以Activiti为代表的工作流简单使用教程&#xff0c;希望能给有需要的小伙伴们一些帮助。下面我们就来开始介绍Activiti工作流的基本使用情况。 二. Activiti工…

常见的5种数据分析方法有哪些?

看大家介绍了那么那么多的数据分析方法&#xff0c;但不同的数据分析方法使用场景不同&#xff0c;A常用的B不一定常用。 所以这篇只介绍5种基于逻辑层面的&#xff0c;几乎人人都会用的数据分析方法。 先来分享一下数据分析6大步骤&#xff1a; 按照这6个步骤&#xff0c;结合…

Hadoop 的基础知识

Hadoop 的基础知识1. Hadoop 简介2. Hadoop 的发展简史3. Hadoop 现状4. Hadoop 特性优点5. Hadoop 发行版本6. Hadoop 架构变迁7. Hadoop 集群集体概念1. Hadoop 简介 Hadoop 官网: https://hadoop.apache.org/ Apache Hadoop 软件库是一个框架, 是 Apache 软件基金会的一款开…

SpringBoot 自动装配原理,一文掌握!|原创

本文详细讲解了 SpringBoot 自动装配原理&#xff0c;可以直接拉到最后看总结。由于 Spring 源码比较复杂&#xff0c;是需要一些基础的。如果有不懂的地方&#xff0c;欢迎提问&#xff01;点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达…

【微信小程序项目的基本组成结构】

项目的基本组成结构 ├── app.js # 小程序的逻辑文件 ├── app.json # 小程序的配置文件 ├── app.wxss # 全局公共样式文件 ├── pages # 存放小程序的各个页面 │ ├── index # index页面 │ │ ├── index.js # 页面逻辑 │ │ ├── index.wxml # 页面结构 │…

亿级流量的互联网项目如何快速构建?手把手教你构建思路

一. 大流量的互联网项目 1.项目背景 索尔老师之前负责的一个项目&#xff0c;业务背景是这样的。城市的基础设施建设是每个城市和地区都会涉及到的&#xff0c;如何在基建工地中实现人性化管理&#xff0c;是当前项目的主要诉求。该项目要实现如下目标&#xff1a; 工地工人的…

2022年底了,你们公司还好吗?我这里不太好

以下这些也是和几个朋友聊天的时候慢慢聊出来的&#xff0c;不一定真实啊&#xff0c;当做大家开发累了以后的一点调味剂吧 一、宇宙厂 1.宇宙人员成本优化计划&#xff0c;随着各个业务确认了优化目标&#xff0c;将在接下来陆续开展。 某中台确认了指标&#xff0c;将在“在职…

【蓝桥杯备赛系列 | 简单题】素数判断 字符串输入输出

&#x1f935;‍♂️ 个人主页: 计算机魔术师 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 蓝桥杯竞赛专栏 | 简单题系列 &#xff08;一&#xff09; 作者&#xff1a; 计算机魔术师 版本&#xff1a; 1.0 &#xff08…

搭建免费内网穿透

1&#xff0c;参考&#xff1a; https://news.cndns.com/ArticlesDetail/articlesdel/id/8654https://news.cndns.com/ArticlesDetail/articlesdel/id/8654 2&#xff0c;搭建Ngrok 官网&#xff1a; https://www.ngrok.cc/https://www.ngrok.cc/ &#xff08;1&…

[网鼎杯 2020 白虎组]PicDown(任意文件读取)

打开界面发现有一个get传参然后&#xff0c;尝试任意文件读取漏洞&#xff0c;/etc/passwd看一下,提示下载了一个jpg图片然后 打不开只能用 010查看一下信息 看来是猜对了&#xff0c;然后 如果日记没删掉可以查看历史记录 .bash_history呃呃呃差不到&#xff0c;那就看一下现…

【Lilishop商城】No4-3.业务逻辑的代码开发,涉及到:会员B端第三方登录的开发-微信小程序登录接口开发

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代码…

第十六讲:神州交换机访问控制列表的配置

访问控制列表ACL&#xff08;Access Control Lists&#xff09;数据定义工具&#xff0c;基于用户自行定义的数据的参数区分不同的数据流&#xff0c;是在交换机和路由器上经常采用的一种防火墙技术&#xff0c;它可以对经过网络设备的数据包根据一定规则进行过滤。它有以下一些…

#5文献学习总结--利用多级反馈排队的雾计算框架中的期限和优先级感知任务卸载

文献&#xff1a;DPTO: A Deadline and Priority-aware Task Offloading in Fog Computing Framework Leveraging Multi-level Feedback Queueing 延迟相关优先级感知卸载&#xff08;DPTO&#xff09;策略&#xff0c;基于任务的最后期限为每个任务分配优先级&#xff0c;并将…

C#,图像二值化(06)——全局阈值的大津OTSU算法及其源代码

1、大津OTSU算法 最大类间方差法是1979年由日本学者大津(Nobuyuki Otsu)提出的&#xff0c;是一种自适应阈值确定的方法&#xff0c;又叫大津法&#xff0c;简称OTSU&#xff0c;是一种基于全局的二值化算法&#xff0c;它是根据图像的灰度特性,将图像分为前景和背景两个部分。…

rocketmq 实战问题汇总

rocketmq 实战过程会遇到这样或者那样的问题&#xff0c;今天我们专门抽出一篇文章来分析一下汇总一下&#xff0c;避免以后踩同样的坑&#xff1a; 1、找不到JDK的问题&#xff1a; 综合分析&#xff0c;是因为JDK安装的目录有空格导致的&#xff1a;Program Files 两个单词之…

YOLO-V5 系列算法和代码解析(三)—— 训练数据加载

文章目录调试准备Debug 设置代码修改调试数据代码运行逻辑类初始化启动迭代器数据增强调试准备 为了便于阅读代码和打印中间变量&#xff0c;需进行调试模式下运行代码。配置平台&#xff1a;Ubuntu&#xff0c;VSCode。在上一篇博文中&#xff0c;我们简单探讨过调试的设置。在…

JavaScript手写响应式原理(详解)

响应式原理 首先我们有一个对象 const obj {name: zlk,age: 18}这个对象可能在别处被用到 比如是这样的 function foo() {const newValue obj.nameconsole.log(hello world);console.log(obj.name);}我们来改变obj对象中的name的值 obj.name zlk这时候foo()应该被重新执…

一文读懂bert结构。

最近承接了项目要复现tiny_Bert。所以在这里用文章记录自己学到的。这篇文章是前置&#xff0c;主要介绍bert原理。 下一篇文章介绍tinybert的原理和训练 模型介绍&#xff1a; BERT概述&#xff1a; 如果要介绍tinyBERT&#xff0c;首先我们需要了解BERT模型。&#xff08;了…