多线程并发环境生产者-消费者,kotlin

news2024/10/7 19:36:42

多线程并发环境生产者-消费者,kotlin

多个生产者-多个消费者,消费者竞争抢占生产者制造的资源。

//存放资源的仓储
val store = arrayOfNulls<Int>(1)

//资源
var RESOURCE: Int = 0

fun producer(tid: Long) {
    synchronized(store) {
        if (isFull()) {
            return
        }

        println("生产->$RESOURCE $tid @${System.currentTimeMillis()}")
        store[0] = RESOURCE //生产的资源

        RESOURCE++
    }
}

fun consumer(tid: Long) {
    synchronized(store) {
        if (!isFull()) {
            return
        }

        val i = store[0]
        println("消费<-$i $tid @${System.currentTimeMillis()}")
        store[0] = null //资源被消耗
    }
}

fun isFull(): Boolean {
    return store[0] != null
}

fun go() {
    //多个消费者,竞争消耗资源
    for (i in 0 until 5) {
        object : Thread() {
            override fun run() {
                while (true) {
                    sleep(3)

                    consumer(this.threadId())
                }
            }
        }.start()
    }

    //多个生产者
    for (i in 0 until 5) {
        val t = object : Thread() {
            override fun run() {
                while (true) {
                    sleep(3)

                    producer(this.threadId())
                }
            }
        }
        t.start()
    }
}

fun main(args: Array<String>) {
    go()
}

 

 

生产->0 31 @1680141217600
消费<-0 26 @1680141217600
生产->1 30 @1680141217600
消费<-1 24 @1680141217604
生产->2 28 @1680141217605
消费<-2 26 @1680141217605
生产->3 30 @1680141217605
消费<-3 24 @1680141217607
生产->4 31 @1680141217608
消费<-4 26 @1680141217608
生产->5 32 @1680141217608
消费<-5 27 @1680141217608
生产->6 30 @1680141217608
消费<-6 23 @1680141217610
生产->7 31 @1680141217611
消费<-7 27 @1680141217612
生产->8 29 @1680141217612
消费<-8 25 @1680141217613
生产->9 32 @1680141217614
消费<-9 26 @1680141217614
生产->10 28 @1680141217614
消费<-10 27 @1680141217615
生产->11 29 @1680141217615
消费<-11 25 @1680141217616
生产->12 31 @1680141217617
消费<-12 27 @1680141217618
生产->13 29 @1680141217619
消费<-13 25 @1680141217619
生产->14 28 @1680141217620
消费<-14 26 @1680141217620
生产->15 31 @1680141217620
消费<-15 27 @1680141217622
生产->16 29 @1680141217623
消费<-16 25 @1680141217623

 

 

Java线程同步:生产者-消费者 模型(代码示例)_zhangphil的博客-CSDN博客public class ThreadSyn {public static void main(String[] args) {new ThreadSyn();}public ThreadSyn() {Queue queue = new Queue();Producter p = new Producter(queue);Consumer c = newhttps://blog.csdn.net/zhangphil/article/details/43800967

 

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

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

相关文章

【MySQL】- 02MySQL explain执行

目录 1.使用explain语句去查看分析结果2.MYSQL中的组合索引3.使用慢查询分析&#xff08;实用&#xff09;4.MYISAM和INNODB的锁定explain用法详解关于MySQL执行计划的局限性&#xff1a;备注&#xff1a; 1.使用explain语句去查看分析结果 如explain select * from test1 whe…

MicroPython应用基础-准备MicroPython开发板

MicroPython应用基础-准备基于MM32F5的MicroPython开发板 文章目录 MicroPython应用基础-准备基于MM32F5的MicroPython开发板引言硬件软件搭建MicroPython编译环境获取MicroPython源码编译MicroPython源码生成固件下载MicroPython固件到电路板 运行第一个样例工程 引言 本文主…

JavaScript变量、数据类型、运算符

1. 变量 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, in…

GoWeb -- gin框架的入门和使用

认识gin go流行的web框架 go从诞生之初就带有浓重的开源属性&#xff0c;其原生库已经很强大&#xff0c;即使不依赖框架&#xff0c;也能进行高性能开发&#xff0c;又因为其语言并没有一定的设计标准&#xff0c;所以较为灵活&#xff0c;也就诞生了众多的框架&#xff0c;各…

使用朴素贝叶斯过滤垃圾邮件

使用朴素贝叶斯过滤垃圾邮件 文章目录 使用朴素贝叶斯过滤垃圾邮件流程准备数据构建训练集和测试集分类电子邮件 完整测试代码&#xff1a;欢迎关注公众号【三戒纪元】 朴素贝叶斯的最著名的应用&#xff1a;过滤电子邮件垃圾。 流程 收集数据&#xff1a;提供文本文件准备数据…

【ISO14229_UDS刷写】-3-$36诊断服务TransferData理论部分

总目录&#xff1a;&#xff08;单击下方链接皆可跳转至专栏总目录&#xff09; 《UDS/OBD诊断需求编辑工具》总目录https://blog.csdn.net/qfmzhu/article/details/123697014 目录 1 $0x36 TransferData诊断服务描述 2 0x36服务请求消息 2.1 0x36服务请求消息定义 2.2 0…

【C++系列P1】带上这篇基础小宝典,向特性奇多的C++进发吧!勇士们!(持续更新ing~)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 C系列 &#xff0c;热烈欢迎&#xff01;(持续更新ing~&#xff09;本章主要内容面向刚刚学完C语言&#xff0c;准备或正在接触C的老铁。而往往C奇多的小特性和知识点让铁铁们头晕晕脑涨涨&#xff0c;因而本章收纳了许多C中零散的知识…

跨境电商系统源码分享,解决你的电商难题

作为跨境电商领域的专家&#xff0c;我在这里为你分享跨境电商系统源码&#xff0c;帮助你解决各种电商难题&#xff01;本文将为你提供全面而专业的指导&#xff0c;让你的电商之路更加顺畅。 为什么选择跨境电商系统源码&#xff1f; 跨境电商系统源码是现代电商业务管理的…

MongoDB超全语法大全

MongoDB 安装教程 一、介绍 mongodb数据库是非关系数据库&#xff0c;mongodb中没有表的概念&#xff0c;数据都是存储在集合中 易扩展&#xff1a; NoSQL数据库种类繁多&#xff0c; 但是⼀个共同的特点都是去掉关系数据库的关系型特性。 数据之间⽆关系&#xff0c; 这样就…

如何运行Node.js脚本及读取环境变量

目录 1、如何从CLI 运行Node.js 脚本 2、将字符串作为参数传递到节点&#xff0c;而不是文件路径 3、自动重新启动应用程序 4、如何从Node.js中读取环境变量 1、如何从CLI 运行Node.js 脚本 运行Node.js程序的通常方法是运行全局可用的Node命令&#xff08;一旦安装Node.js…

[论文分享] When deep learning met code search

When deep learning met code search [ESEC/FSE 2019] Jos Cambronero MIT CSAIL U.S.A. Hongyu Li Facebook, Inc. U.S.A. SeohyunKim Facebook,Inc. U.S.A. KoushikSen EECSDepartment,UCBerkeley U.S.A. SatishChandra Facebook,Inc. U.S.A. 最近有多个关于使用深度神经网…

ASP.NET 未能找到类型或命名空间名称“HttpRequestMessage”

引入System.Net.Http后&#xff0c;运行页面还是报错 using System.Net.Http;chatGPT解释需要安装Microsoft.AspNet.WebApi.Client包&#xff0c;IIS安装的包文件存储在bin目录下&#xff0c;安装包后bin目录多出了一些列文件 运行页面后还是报错 需要在web.config配置文件…

【ISO14229_UDS刷写】-6-$34,$35,$36,$37诊断服务用于downloading下载/uploading上载数据的消息流示例

总目录&#xff1a;&#xff08;单击下方链接皆可跳转至专栏总目录&#xff09; 《UDS/OBD诊断需求编辑工具》总目录https://blog.csdn.net/qfmzhu/article/details/123697014【ISO14229_UDS刷写】-1-$34诊断服务RequestDownload理论部分https://blog.csdn.net/qfmzhu/article…

VM600 CPUR2 机架控制器和通信接口卡

VM600 CPUR2和IOCR2机架控制器和通信接口卡对是一个中央处理器(CPU)卡对&#xff0c;作为Meggitt振动计产品线中VM600机架机械保护系统(MPS)和/或状态监控系统(CMS)的系统控制器和数据通信网关。 注:不同版本的CPUx/IOCx框架控制器和通信接口卡对可用&#xff0c;如下所示: C…

初探 Compose for Wear OS:实现一个简易选择APP

前言 俗话说&#xff0c;人生有三大难题&#xff1a;早上吃啥、中午吃啥、晚上吃啥。 这个问题一度困扰着无数的人&#xff0c;直到一款帮你选择吃什么的神器《今天吃啥》出现&#xff0c;人们再也不用为了每天吃啥而犯愁了。 哈哈&#xff0c;以上纯属抖机灵。 最近访问谷歌…

Spring MVC数据绑定和响应

数据绑定 在程序运行时&#xff0c;Spring MVC接收到客户端的请求后&#xff0c;会根据客户端请求的参数和请求头等数据信息&#xff0c;将参数以特定的方式转换并绑定到处理器的形参中。Spring MVC中将请求消息数据与处理器的形参建立连接的过程就是Spring MVC的数据绑定。 …

电力监控系统在中原科技城智慧能源配电工程中的应用

摘 要&#xff1a;随着社会经济的快速发展&#xff0c;我国变电站正朝着现代化的方向不断发展&#xff0c;自动化设备以及继电保护装置凭借自身优异性能而获得广泛应用。本文介绍的AM5SE系列的微机保护装置&#xff0c;可以针对中原科技城智慧能源配电工程中不同保护对象提供对…

真无线蓝牙耳机什么牌子好?盘点五款质量好的蓝牙耳机

相信很多人都有过这样的经历&#xff0c;早 晚高峰像沙丁鱼般被挤在公交或地铁上&#xff0c;嘈杂的环境、工作的劳累让你只想听听音乐追追剧&#xff0c;给自己一些放松的时光。可拿出有线耳机却常常被挤掉&#xff0c;更有被扯到耳朵的时候。想换一款蓝牙耳机&#xff0c;但面…

Kubernetes 证书详解

K8S 证书介绍 在 Kube-apiserver 中提供了很多认证方式&#xff0c;其中最常用的就是 TLS 认证&#xff0c;当然也有 BootstrapToken&#xff0c;BasicAuth 认证等&#xff0c;只要有一个认证通过&#xff0c;那么 Kube-apiserver 即认为认证通过。下面就主要讲解 TLS 认证。 …

chatgpt赋能python:Python动作捕捉:何为动作捕捉及其应用

Python动作捕捉&#xff1a;何为动作捕捉及其应用 介绍 动作捕捉是一种技术&#xff0c;可将人或物体的运动转换为数字形式。在过去的几十年里&#xff0c;动作捕捉已被广泛应用于电影制作、游戏开发、医学研究等领域。 Python是一种功能强大的编程语言&#xff0c;已成为许…