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(),等待所有线程到达屏障点。最后,我们打印一条消息,表示所有线程都已经到达屏障点。

相关推荐
程序员小杰@3 分钟前
【MCP系列教程】 Python 实现 FastMCP StreamableHTTP MCP:在通义灵码 IDE 开发并部署至阿里云百炼
开发语言·python·阿里云
纪东东19 分钟前
做一个实用的节假日工具
java·开发语言
摘星编程28 分钟前
Python 多线程日志错乱:logging.Handler 的并发问题
java·开发语言·python·python多线程·queuehandler
太过平凡的小蚂蚁3 小时前
Kotlin 协程作用域
vue.js·elementui·kotlin
枫の准大一5 小时前
【C++游记】物种多样——谓之多态
开发语言·c++
JuneXcy8 小时前
循环高级(1)
c语言·开发语言·算法
MediaTea9 小时前
Python 第三方库:lxml(高性能 XML/HTML 解析与处理)
xml·开发语言·前端·python·html
西陵9 小时前
Nx带来极致的前端开发体验——使用MF进行增量构建
前端·javascript·架构
Nicholas689 小时前
flutter滚动视图之ProxyWidget、ProxyElement、NotifiableElementMixin源码解析(九)
前端
编啊编程啊程9 小时前
响应式编程框架Reactor【3】
java·开发语言