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

相关推荐
傻啦嘿哟7 分钟前
动态HTTP代理与静态HTTP代理的区别及HTTP代理的常见用途与类型
开发语言·php
伟笑13 分钟前
elementUI 表格隔行换色,修改table表头背景样式
前端·javascript·elementui
小志开发13 分钟前
Java 多态:代码中的通用设计模式
java·开发语言
m0_7482345219 分钟前
SpringMVC 请求参数接收
前端·javascript·算法
@PHARAOH20 分钟前
HOW - 在Windows浏览器中模拟MacOS的滚动条
前端·macos
索然无味io24 分钟前
Python--内置模块和开发规范(上)
开发语言·windows·笔记·python·web安全·网络安全
叫我OldFe31 分钟前
vue videojs使用canvas截取视频画面
前端·vue.js·音视频·js
七爷不在我这里41 分钟前
charles 抓取https<仅web端>
前端·网络协议·https·charles
CsharpDev-奶豆哥1 小时前
ASP.NET实现上传图片生成缩略图的功能
服务器·前端·asp.net
timer_0171 小时前
Skyeye 云智能制造办公系统 VUE 版本 v3.15.11 发布
前端·vue.js·制造