我有两个asyncTasks彼此依赖。任务一必须等到任务二完成。因为有必要检查两者的结果,之后才能继续。我用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
执行线程。我的相关信息是THREAD_POOL_EXECUTOR
并行执行任务。
在任务一结束时,我会执行以下操作来检查另一个变量:
if(!isCancelled())
{
while(mOther.status)
{
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(checkOtherNodeList(P)) // the results are that what it should be the tasks will be canceled
{
mOther.cancel(true);
nodesAddedToTrack.addAll(P);
cancel(true);
return null;
}
synchronized (mOther.status) {
mOther.status = true;
}
}
在第二篇文章中,我最后做了以下几点:
if(isCancelled())
{
nodesAddedToTrack.addAll(P);
nodesAddedToTrack.add(T.get(nodenrfromP));
}
synchronized (status)
{
status = false;
}
while(!status)
{
if(isCancelled())
{
nodesAddedToTrack.addAll(P);
nodesAddedToTrack.add(T.get(nodenrfromP));
return null;
}
}
方法checkOtherNodeList(P)也在处理同步,因为否则我会在包含结果的两个ArrayLists上遇到访问问题。 问题是这种并行化的持续时间比我在一项任务中运行程序的时间长3-5倍。这是正常的吗?同步是问题吗? 两个任务都在while循环中运行。在每次运行while循环时,任务1应该比较结果。如果它们是我想要的,那么两个任务都将被取消,否则两个任务都将在另一个时间运行,依此类推。
答案 0 :(得分:0)
您可以使用2个布尔值编写某种状态对象,并将其传递给两个AsyncTasks。当AsyncTasks完成时,让每个更改1布尔值。在setter中,您可以发现另一个布尔值是否已经更改。在那种情况下,你可以继续。