Android中主线程等待子线程方法实现

Posted 今晚我得回家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中主线程等待子线程方法实现相关的知识,希望对你有一定的参考价值。

日常开发中,我们会遇到多个子线程并发请求,最终合并返回结果到主线程的情况,下面介绍两种实现方法.

方法一:使用join()

public void Test() {
        System.out.println(System.currentTimeMillis() + ":开始执行");
        final Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                    System.out.println("thread1:执行完了");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        thread1.start();

        final Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    System.out.println("thread2:执行完了");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        thread2.start();

        try {
            thread1.join();
            thread2.join();

            System.out.println(System.currentTimeMillis() + ":子线程都执行完了" );

        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

方法二:使用CountDownLatch

    private CountDownLatch countDownLatch = new CountDownLatch(2);
    
    public void Test() {
        System.out.println(System.currentTimeMillis() + ":开始执行");
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                    countDownLatch.countDown();
                    System.out.println("thread1:执行完了");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        thread1.start();

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    System.out.println("thread2:执行完了");
                    countDownLatch.countDown();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        thread2.start();

        try {
            countDownLatch.await();
            System.out.println(System.currentTimeMillis() + ":子线程执行完了");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

以上两种方法比较容易理解且实现简单,希望能帮到你.

以上是关于Android中主线程等待子线程方法实现的主要内容,如果未能解决你的问题,请参考以下文章

多线程等待所有子线程执行完使用总结——wait()和notify(),join()方法

EventBusEventBus 源码解析 ( 事件发送 | 发布线程为 子线程 切换到 主线程 执行订阅方法的过程分析 )

设置主线程等待子线程执行的方法

如何实现线程互等,线程2等待线程1结束后才继续执行。(可设置标志位) 求源代码

[Java][Android] 多线程同步-主线程等待全部子线程完毕案例

Android Handler