Kotlin runBlocking CoroutineScope synchronized简单死锁场景

Kotlin runBlocking CoroutineScope synchronized简单死锁场景

import kotlinx.coroutines.*

fun main(args: Array<String>) {
    runBlocking {
        val lock1 = Any()
        val lock2 = Any()

        CoroutineScope(Dispatchers.IO).launch {
            repeat(10) {
                println("A-$it 申请 lock1...")
                synchronized(lock1) {
                    println("A-$it 获得lock1")

                    println("A-$it 申请lock2...")
                    synchronized(lock2) {
                        println("A-$it 获得lock2")
                    }
                }
                println("A-$it end")
            }
        }

        CoroutineScope(Dispatchers.IO).launch {
            repeat(10) {
                println("B-$it 申请lock2...")
                synchronized(lock2) {
                    println("B-$it 获得lock2")

                    println("B-$it 申请lock1...")
                    synchronized(lock1) {
                        println("B-$it 获得lock1")
                    }
                }
                println("B-$it end")
            }
        }

        delay(Long.MAX_VALUE)
    }
}

A-0 申请 lock1...
A-0 获得lock1
A-0 申请lock2...
A-0 获得lock2
A-0 end
B-0 申请lock2...
B-0 获得lock2
A-1 申请 lock1...
B-0 申请lock1...
A-1 获得lock1
A-1 申请lock2...
 

ReentrantLock替换synchronized解决多线程并发死锁,Java_reentrantreadwritelock是否可以替换synchronized关键字避免线程阻塞-CSDN博客文章浏览阅读410次。Java并发多线程环境中,造成死锁的最简单的场景是:多线程中的一个线程T_A持有锁L1并且申请试图获得锁L2,而多线程中另外一个线程T_B持有锁L2并且试图申请获得锁L1。线程的锁申请操作是阻塞的,于是造成线程T_A和线程T_B无法正确获得想要的锁,两个线程被阻塞进入死锁状态。Java线程同步锁ReentrantLock和Condition中断等待程序前提条件满足_zhangphil的博客-CSDN博客。_reentrantreadwritelock是否可以替换synchronized关键字避免线程阻塞https://blog.csdn.net/zhangphil/article/details/127548507

Java多线程并发环境下的synchronized死锁实例_synchronized(1) 死锁题目-CSDN博客文章浏览阅读632次。Java并发多线程环境中,造成死锁的最简单的场景是:多线程中的一个线程T_A持有锁L1并且申请试图获得锁L2,而多线程中另外一个线程T_B持有锁L2并且试图申请获得锁L1。线程的锁申请操作是阻塞的,于是造成线程T_A和线程T_B无法正确获得想要的锁,两个线程被阻塞进入死锁状态。_synchronized(1) 死锁题目https://blog.csdn.net/zhangphil/article/details/127534524Semaphore替换多线程synchronized解决并发环境死锁,Java_semaphore 防止死锁java-CSDN博客文章浏览阅读519次。新Java线程Semaphore:并行环境下访问竞争资源控制Semaphore是从Java 1.5引入的Java线程新内容。Java并发多线程环境中,造成死锁的最简单的场景是:多线程中的一个线程T_A持有锁L1并且申请试图获得锁L2,而多线程中另外一个线程T_B持有锁L2并且试图申请获得锁L1。线程的锁申请操作是阻塞的,于是造成线程T_A和线程T_B无法正确获得想要的锁,两个线程被阻塞进入死锁状态。新Java线程Semaphore:并行环境下访问竞争资源控制_zhangphil的博客-CSDN博客。_semaphore 防止死锁javahttps://blog.csdn.net/zhangphil/article/details/127547504

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

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

相关文章

[NCom]:CeO2上单原子 Pt用于 CO 氧化的记忆驱动动力学

摘要&#xff1a;CeO2上的铂族金属单原子代表了降低汽车尾气处理催化剂贵金属需求的潜在方法。在这里&#xff0c;我们展示了CeO2上两种类型的单原子 Pt (Pt1) 的动态演化&#xff0c;即Pt/CeO2中的吸附 Pt 1和PtATCeO2中的方形平面 Pt1&#xff0c;在 500 C 下制造&#xff0c…

金融知识分享系列之:KD指标

金融知识分享系列之&#xff1a;KD指标 一、KD指标二、KD指标计算三、KD指标原理四、KD指标应用 一、KD指标 KD信号提供入场的工具 名称&#xff1a;随机震荡指标参数&#xff1a;&#xff08;9,3,3&#xff09;组成&#xff1a;K线&#xff0c;D线&#xff0c;20轴&#xff0…

【学习心得】Python数据分析的基本思路

一、什么是数据分析&#xff1f; 数据分析是指通过一些方法&#xff0c;对一些数据进行分析&#xff0c;从中提取出有价值的信息并形成结论进行展示。 &#xff08;1&#xff09;一些方法 数学和统计学方法&#xff1a;例如回归分析、聚类分析、主成分分析、时间序列分析等&a…

Day01-数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)

文章目录 Day01-数据类型和运算符学习目标1. 数据库介绍1.1 数据库的发展历史1.2 数据库分类1.2.1 关系型(SQL)数据库1.2.2 非关系型(NoSQL)数据库1.2.3 数据库排名 2. MySQL服务器的安装2.1 MySQL介绍2.2 下载2.3 安装2.4 启动服务器2.5 卸载 3. MySQL客户端3.1 使用命令行客户…

数据库关系运算理论:关系数据操作与关系完整性概念解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Java学习六—面向对象

一、关于面向对象 1.1简介 Java 是一种面向对象编程语言&#xff0c;其核心思想是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;。 面向对象编程是一种程序设计范式&#xff0c;它将数据与操作数据的方法&#xff08;函数&#xff09;捆…

K8S核心原理

K8S核心原理 K8S的网络模型 K8S的网络中主要存在4种类型的通信&#xff1a; 同一Pod内的容器间通信各个Pod彼此间的通信Pod和Service间的通信集群外部流量和Service之间的通信 K8S为Pod和Service资源对象分别使用了各自的专有网络&#xff0c;Pod网络由K8S的网络插件配置实…

影响MySql 服务性能最重要的两个参数。

不同的需求&#xff0c;不同服务器硬件配置&#xff0c;要想MySql 服务处于最优状态是需要调试一些参数的&#xff0c;可调的参数非常多&#xff0c;在看完官方的mysql的文档&#xff0c;结合以前的配置情况在这里选择影响性能最大的参数作介绍&#xff1a; 先查一下参数情况&…

Transformer位置编码(Position Embedding)理解

本文主要介绍4种位置编码&#xff0c;分别是NLP发源的transformer、ViT、Sw-Transformer、MAE的Position Embedding 一、NLP transformer 使用的是1d的绝对位置编码&#xff0c;使用sincos将每个token编码为一个向量【硬编码】 Attention Is All You Need 在语言中&#xff0…

搜索(Shuffle‘m Up ,Oil Deposits )

Shufflem Up 思路&#xff1a;首先我们需要知道两个停止条件第一就是找到了&#xff0c;那么怎么算没有找到呢&#xff1f;当一个字符串重复出现的时候就代表着已经不可能出现答案了。 犯下的错误&#xff1a;第一就是对string的使用不够了解。第二就是对map数组的使用也不是很…

循环冗余检验CRC

目录 一、数据链路层 二、数据链路层的三个基本问题 1. 封装成帧 2. 透明传输 3. 差错检验 4. CRC计算​编辑 三、参考书目和视频 一、数据链路层 从物理层传来的比特(实际上就是物理层表示数据的特殊名称)&#xff0c;会在数据链路层封装成帧(实际上就是数据链路层表示…

视频素材库排行榜前六名,推荐大家收藏

大家好&#xff01;今天我要给大家带来的是视频素材库排行榜前十名&#xff0c;让你的视频创作更加别出心裁&#xff01; 蛙学网在视频素材库排行榜中&#xff0c;蛙学网绝对是值得使用的。这里有大量的高质量视频素材&#xff0c;涵盖了各种风格和主题&#xff0c;特别是对于展…

蓝桥杯单片机快速开发笔记——串口通信

一、原理分析 二、思维导图 三、示例框架 #include <STC15F2K60S2.H> #include "HC573.h"void UartInit(void) //9600bps12.000MHz {SCON 0x50; //8位数据,可变波特率AUXR | 0x01; //串口1选择定时器2为波特率发生器AUXR & 0xFB; //定时器时钟12T模式…

ASP.NET-简单(增、删、改、查)

目录 背景: Person.cs代码: WebForm1.aspx代码: personOperate.cs代码: 最终效果: 背景: 界面效果: 主页面的控件布局&#xff1a; 4个label: -Label控件用于在页面上显示文本或标签&#xff0c;通常用于标识输入框&#xff0c;显示标题或提供说明性文字 2个Textbox: -Tex…

泳道图手把手快速上手(附带软件)

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师&#xff0c;大模型&#xff0c;爬虫、ACM算法 &#x1f492; 公众号&#xff…

有了std::thread,为什么还需要引入std::jthread?

C进阶专栏&#xff1a;http://t.csdnimg.cn/HGkeZ 目录 1.前言 2.std::is_invocable_v 3.std::jthread 3.1.构造函数 3.2.std::jthread无需join/detach使用实例 3.3.std::jthread处理外部请求中断实 3.4.处理中断请求示例代码 4.特性 5.总结 1.前言 C11以来提供了C原…

高校二手交易平台|基于JSP(Java脚本页面)+ Mysql+Java+ B/S结构的高校二手交易平台设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

SSA优化朴素贝叶斯分类预测(matlab代码)

SSA-朴素贝叶斯分类预测matlab代码 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法&#xff0c;在2020年提出&#xff0c;主要是受麻雀的觅食行为和反捕食行为的启发。 数据为Excel分类数据集数据。 数据集划分为训练集、验证集、测试集,比例为8&a…

Java毕业设计 基于SSM网上花店 订花系统 在线花店

Java毕业设计 基于SSM网上花店 订花系统 在线花店 SSM jsp 网上花店 订花系统 在线花店 功能介绍 前端用户&#xff1a;首页 图片轮播 搜索 登录 注册 鲜花分类 分类显示 折扣花束 热销花束 花卉列表 花卉详情 收藏 加入购物车 评价 活动公告 公告详情 买家留言 我的购物车 购…

Linux编程4.9 网络编程-建立连接

1、TCP的连接与断开 三次握手与四次挥手 2、服务器端并发性处理 2.1 多进程模型 一个父进程&#xff0c;多个子进程父进程负责等待并接受客户端连接子进程: 完成通信&#xff0c;接受一个客户端连接&#xff0c;就创建一个子进程用于通信。 2.2 多线程模型 多线程服务器是…