legongju.com
我们一直在努力
2025-01-06 17:30 | 星期一

android countdownlatch如何使用

CountDownLatch是Java中的一个同步辅助类,它允许一个或多个线程等待直到一组操作完成

  1. 导入必要的包:
import java.util.concurrent.CountDownLatch;
  1. 在主线程中创建一个CountDownLatch实例,并设置计数器值:
int numberOfThreads = 5; // 假设有5个子线程需要等待
CountDownLatch latch = new CountDownLatch(numberOfThreads);
  1. 创建子线程并在其中执行任务。在每个子线程完成任务后,调用latch.countDown()方法来减少计数器值:
for (int i = 0; i < numberOfThreads; i++) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                // 执行任务
                System.out.println(Thread.currentThread().getName() + " is working.");
                Thread.sleep(1000); // 假设每个子线程需要1秒钟来完成任务

                // 任务完成后,减少计数器值
                latch.countDown();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();
}
  1. 在主线程中调用latch.await()方法来阻塞主线程,直到计数器值变为0:
try {
    latch.await(); // 主线程将阻塞,直到所有子线程完成任务
} catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println("All threads have finished their tasks.");

将以上代码整合到一个完整的示例中:

import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {
    public static void main(String[] args) {
        int numberOfThreads = 5; // 假设有5个子线程需要等待
        CountDownLatch latch = new CountDownLatch(numberOfThreads);

        for (int i = 0; i < numberOfThreads; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        // 执行任务
                        System.out.println(Thread.currentThread().getName() + " is working.");
                        Thread.sleep(1000); // 假设每个子线程需要1秒钟来完成任务

                        // 任务完成后,减少计数器值
                        latch.countDown();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }

        try {
            latch.await(); // 主线程将阻塞,直到所有子线程完成任务
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("All threads have finished their tasks.");
    }
}

运行这个示例,你会看到主线程在所有子线程完成任务之前阻塞,然后输出"All threads have finished their tasks."。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/60604.html

相关推荐

  • 如何使用android sealed关键字

    如何使用android sealed关键字

    在 Android 中,sealed 关键字是 Kotlin 语言的一部分,用于限制类的继承能力 定义一个 sealed 类:
    要使用 sealed 关键字,首先需要定义一个 sealed 类。这...

  • android sealed类有什么优势

    android sealed类有什么优势

    在 Android 中,Sealed 类是一种特殊的类,它限制了类继承的能力 更好的封装:Sealed 类可以将一组相关的类组合在一起,这有助于更好地封装代码。通过将相关的类...

  • android sealed类是否有助于代码维护

    android sealed类是否有助于代码维护

    Android 中的 sealed classes(封闭类)是一种限制类继承方式的机制。通过封闭类,你可以精确地控制哪些类可以继承你的类,而不能继承的类则无法访问被封闭类的成...

  • 如何在android中正确使用sealed类

    如何在android中正确使用sealed类

    在Android开发中,sealed 类是一种特殊的类,它限制了子类的继承能力 定义 sealed 类:首先,你需要创建一个 sealed 类。这个类可以包含抽象方法、属性或者其他成...

  • android virtualdisplay兼容性怎样

    android virtualdisplay兼容性怎样

    Android VirtualDisplay API的兼容性情况因设备型号、操作系统版本等因素而异。以下是对其兼容性的具体分析:
    Android VirtualDisplay API的兼容性 支持版本...

  • android virtualdisplay更新频率如何

    android virtualdisplay更新频率如何

    Android的虚拟显示(Virtual Display)通常用于投屏、录制屏幕内容等场景。关于其更新频率,这主要取决于具体的使用场景和应用程序的实现。 投屏应用:在投屏应用...

  • android virtualdisplay使用是否便捷

    android virtualdisplay使用是否便捷

    Android Virtual Display(虚拟显示)是一个功能强大的工具,它允许开发者在Android设备上创建一个虚拟的显示表面,用于多种用途,如测试、演示或录制屏幕内容。...

  • android virtualdisplay与其他显示技术对比

    android virtualdisplay与其他显示技术对比

    Android VirtualDisplay与其他显示技术(如Miracast、AirPlay)相比,具有独特的优势和适用场景。以下是它们之间的主要对比:
    Android VirtualDisplay 定义...