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

相关推荐

  1. MySQL场景与应对方案

    2024-03-21 03:14:02       37 阅读
  2. 2024-03-21 03:14:02       20 阅读
  3. 以及如何避免

    2024-03-21 03:14:02       16 阅读
  4. 资源、、如何监测

    2024-03-21 03:14:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 03:14:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 03:14:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 03:14:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 03:14:02       20 阅读

热门阅读

  1. 【LAMMPS学习】三、构建LAMMPS(2)Make构建

    2024-03-21 03:14:02       21 阅读
  2. 2.4 ROC曲线是什么?

    2024-03-21 03:14:02       21 阅读
  3. 主动学习:外语学习的质变之路

    2024-03-21 03:14:02       20 阅读
  4. 24计算机考研调剂 | 天津大学

    2024-03-21 03:14:02       19 阅读
  5. QT5.14.2 Qt窗体应用开发的精髓

    2024-03-21 03:14:02       22 阅读
  6. 题解:CF1923D(Slimes)

    2024-03-21 03:14:02       22 阅读
  7. 蓝桥杯2023省赛:阶乘求和

    2024-03-21 03:14:02       18 阅读
  8. 新概念英语第二册(95)

    2024-03-21 03:14:02       20 阅读
  9. 探索并发编程:深入理解线程池

    2024-03-21 03:14:02       18 阅读