Java 在Android中等待子模块初始化

Java 在Android中等待子模块初始化,java,android,multithreading,synchronization,Java,Android,Multithreading,Synchronization,我有一个应用程序,其中我启动了几个线程,每个线程都有一个子模块。 线程启动后,子模块将初始化并运行 public class MySubmoduleThread extends Thread { ... private MySubmodule mSubmodule; ... @Override public final void run() { mSubmodule.initialize(); mSubmodule.run(

我有一个应用程序,其中我启动了几个线程,每个线程都有一个子模块。 线程启动后,子模块将初始化并运行

public class MySubmoduleThread extends Thread {
    ...
    private MySubmodule mSubmodule;
    ...
    @Override
    public final void run() {
        mSubmodule.initialize();
        mSubmodule.run();
    }
}
这些线程在应用程序
onCreate
上启动。等待所有子模块初始化的简单方法是什么

public class MyApp extends Application {
    ...
    @Override
    public void onCreate() {
        super.onCreate();
        ...
        mSubmoduleThread1.start();
        mSubmoduleThread2.start();
        ...
        mSubmoduleThreadN.start();
        --> waitSomehowUntilAllSubmodulesAreInitialized
        ...
    }

当然,我可以编辑
MySubmoduleThread
code在
mSubmodule.initialize()之间添加内容
mSubmodule.run()

请考虑不要等待。阻塞主线程不是一个好主意。使用子模块的地方可能可以异步访问它们,并在需要时等待

否则,请使用。。从包裹里拿出来


考虑一下不要等待。阻塞主线程不是一个好主意。使用子模块的地方可能可以异步访问它们,并在需要时等待

否则,请使用。。从包裹里拿出来

public class MySubmoduleThread extends Thread {
    ...
    private MySubmodule mSubmodule;
    private CountDownLatch mLatch; // shared latch object accross tasks
    public MySubModuleThread(CountDownLatch latch) {
        mLatch = latch;
    }
    ...
    @Override
    public final void run() {
        mSubmodule.initialize();
        mLatch.countDown(); // count 1 down
        mSubmodule.run();
    }
}

public class MyApp extends Application {
    ...
    @Override
    public void onCreate() {
        super.onCreate();
        int nrOfTasks = /* N */;
        CountDownLatch latch = new CountDownLatch(nrOfTasks);
        mSubmoduleThread1 = new SubModuleThread(latch);
        mSubmoduleThread2 = new SubModuleThread(latch);
        ...
        mSubmoduleThread1.start();
        mSubmoduleThread2.start();
        ...
        mSubmoduleThreadN.start();

        latch.await(); // wait that countdown reaches 0 (needs some try catch)

    }