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)
}