我有两个相互依赖的异步任务。任务一必须等到任务二完成。因为要检查两者的结果,之后才能继续。我用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) 也适用于同步,否则我会在访问包含结果的两个 ArrayList 时遇到问题。问题是这种并行化的持续时间比我只在一个任务中运行程序的时间长 3-5 倍。这正常吗?同步有问题吗?两个任务都在一个while循环中运行。在 while 循环的每次运行中,Task 都应该比较结果。如果他们是我想要的两个任务都将被取消,否则两者都将运行另一个时间等等。