gpt4 book ai didi

java - 等待 Android 中的子模块初始化

转载 作者:行者123 更新时间:2023-11-30 03:13:18 25 4
gpt4 key购买 nike

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

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 代码,在 mSubmodule.initialize();mSubmodule.run(); 之间添加一些东西。

最佳答案

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

否则使用 CountDownLatch , Semaphore , .. 来自 java.util.concurrent包。

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)

}

关于java - 等待 Android 中的子模块初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com