看啥推荐读物
专栏名称: 阿里云开发者
阿里巴巴官方技术号,关于阿里的技术创新均将呈现于此
今天看啥  ›  专栏  ›  阿里云开发者

如何爬出Kotlin协程死锁的坑?

阿里云开发者  · 公众号  · 科技公司  · 2024-04-16 08:30
阿里妹导读本文将会剖析 Kotlin 协程死锁的根本原因, 以及如何彻底地从坑中爬出来。在 Java 中有一个非常经典的死锁问题, 就是明明自己已经占用了线程池, 却还继续去申请它, 自己等自己, 就死锁了, 如下图和代码:// 这段代码将死锁到天荒地老final ExecutorService executorService = Executors.newSingleThreadExecutor();executorService.submit(() -> { Future> subTask = executorService.submit(() -> System.out.println("Hello dead lock")); try { subTask.get(); } catch (ExecutionException | InterruptedException ignore) { }});相比别的死锁问题, 这一类问题的坑点在于, 因为线程池的实现问题, jstack 等 jvm 工具无法对其自动诊断, 只能肉眼看出。在 Kotlin 协程中, 因为底层的线程池申请更加黑盒, 如果不是足够了解, 很容易踩到这类坑。本文不会再去重复 Kotlin 协程的基本语法, 而是专注于死锁的话题。下面两段代码 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照