Kotlin CountDownLatch和CyclicBarrier使用方法

在Kotlin中,可以使用CountDownLatch和CyclicBarrier来实现主线程与多个子线程的同步。

复制代码
fun main() {
    val threadCount = 3
    val latch = CountDownLatch(threadCount)

    for (i in 1..threadCount) {
        Thread {
            println("Thread $i is starting")
            Thread.sleep(500)
            latch.countDown()
        }.start()
    }

    latch.await()
    println("All threads have finished")
}

在这个示例中,我们首先创建了一个CountDownLatch实例latch,它的计数器设置为3,表示需要等待3个线程。

然后,我们启动了3个线程,每个线程都会打印两条消息,并调用latch.countDown()。latch.countDown()会减少latch的计数器,当计数器变为0时,主线程会被唤醒并继续执行。

在主线程中,我们调用latch.await(),等待所有线程完成。最后,我们打印一条消息,表示所有线程都已经完成。

下面是一个使用CyclicBarrier的示例:

复制代码
fun main() {
    val threadCount = 3
    val barrier = CyclicBarrier(threadCount)

    for (i in 1..threadCount) {
        Thread {
            println("Thread $i is starting")
            Thread.sleep(500)
            barrier.await()
        }.start()
    }

    barrier.await()
    println("All threads have crossed the barrier")
}

在这个示例中,我们首先创建了一个CyclicBarrier实例barrier,它的计数器设置为3,表示需要等待3个线程。

然后,我们启动了3个线程,每个线程都会打印两条消息,并调用barrier.await()。barrier.await()会等待所有线程到达屏障点,当所有线程都到达屏障点后,barrier会重置,并允许一组新的线程开始等待。

在主线程中,我们调用barrier.await(),等待所有线程到达屏障点。最后,我们打印一条消息,表示所有线程都已经到达屏障点。

相关推荐
小月土星1 小时前
React Router 前端路由深度解析:从传统后端路由到现代 SPA 的完整演进
前端
程序员黑豆1 小时前
鸿蒙开发 Navigation 路由教程:从入门到实战
前端·harmonyos
weixin_440784112 小时前
【HandlerThread实现原理】
android·java·开发语言
天空'之城2 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
XR1234567882 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟3 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
現実君4 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1234 小时前
SpringDAO的用法
java·开发语言·数据库
用户938515635074 小时前
从零理解 React Router v6:每一个 API 都是怎么工作的
前端·javascript·全栈
用户059540174466 小时前
Redis缓存回滚踩坑实录:一个配置失误,让我在凌晨3点丢了3000条数据
前端·css