我有一个带有1个Thread的FixedSizeThreadPool(因为我只需要一个,后面的每个请求应该等到早先的请求完成):
myService = Executors.newFixedThreadPool(1);
myService.execute(new WorkerRunnable());
在我的WorkerRunnable中我做了一些事情,在中间我从我的Activity中调用了一个方法:
myActivity.thisMethodRunsOnUiThread();
方法如下所示:
public void thisMethodRunsOnUiThread() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
I'm trying to Change a View here, that's why i Need to do this on Ui Thread
}
});
}
然后在WorkerRunnable上出现了我的最后一个方法,它应该再次从fixedSizePool上运行seperateThread
myActivity.thisMethodsRunsonUiThread();
thisMethodRunsAgainOnTheSeperateThread();
但我在这里提到的是他只调用MethodWhichShouldRunOnSeperateThread之后应该RunOnUiThread的方法。(这是最后一个方法,所以我的Thread现在就完成了)。可能是seperateThread作为MainThread获得了更高的优先级,所以他等到seperateThread完成然后他启动了在UiThread上运行的方法吗?
我需要完成方法
myActivity.thisMethodsRunsonUiThread();
在此方法之前
thisMethodRunsAgainOnTheSeperateThread();
有人可以解释为什么他这样做吗?任何帮助表示赞赏。
答案 0 :(得分:0)
参考http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)
如果当前线程不是UI线程,则该操作将发布到UI线程的事件队列
因此,此runnable必须等待一段时间才能执行
您可以使用wait()
和notify()/notifyAll()
java方法进行线程操作