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

相关推荐
染指111030 分钟前
6.第二阶段x64游戏实战-分析人物状态
开发语言·汇编·windows·游戏·游戏逆向·x64dbg·x64游戏
哟哟耶耶1 小时前
React-01React创建第一个项目(npm install -g create-react-app)
前端·javascript·react.js
张拭心1 小时前
工作九年程序员的三月小结
android·前端
forestsea1 小时前
Java虚拟机面试题:内存管理(中)
java·开发语言
longlong int1 小时前
【每日算法】Day 17-1:位图(Bitmap)——十亿级数据去重与快速检索的终极方案(C++实现)
开发语言·c++·算法
欧宸雅1 小时前
Perl语言的文件系统
开发语言·后端·golang
try again!1 小时前
HTML快速上手
前端·css·html
Dontla1 小时前
前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标防抖处理、mousemove、debounce()、事件停止触发、超时触发
前端·计算机外设
写代码的小王吧1 小时前
【安全】Java幂等性校验解决重复点击(6种实现方式)
java·linux·开发语言·安全·web安全·网络安全·音视频
喝拿铁写前端1 小时前
字段混乱如何影响系统治理?
前端