Runnables从AsyncTask开始等待彼此

时间:2013-07-31 08:49:18

标签: android performance runnable

我在里面有以下代码和AsyncTask:

@Override
  protected ArrayList<Information> doInBackground(Integer... params)
{
 for (String[] info:informations)
      {
        final String[] infoFinal = info;
        Runnable runnable = new Runnable()

          @Override
          public void run()
          {
            Log.w("DEBUG", String.format("Runnable %s started",info[0]));
            synchronized (this)
            {
              publishProgress(InfoAsyncTask.this.counter++);
            }
            for (String infoInst: infoFinal )
            {
              try
              {
some long execution
...
 };
        runnable.run();
}

}

在日志中,我看到以下内容:

07-31 10:35:28.046: WARN/DEBUG(8983): Runnable 0 started
07-31 10:37:00.343: WARN/DEBUG(8983): Runnable 1 started
07-31 10:37:37.843: WARN/DEBUG(8983): Runnable 2 started
07-31 10:37:54.359: WARN/DEBUG(8983): Runnable 3 started
07-31 10:38:16.882: WARN/DEBUG(8983): Runnable 4 started
07-31 10:38:42.171: WARN/DEBUG(8983): Runnable 5 started

检查时间戳。
它们应该几乎相同(考虑一些队列等待)。 我认为当一个线程启动时,它会立即返回并让循环继续。 是什么让我的runnable等待彼此?

1 个答案:

答案 0 :(得分:1)

Runnable不是一个帖子。它只是interface的单一方法 - run(这使得它的行为与其他方法没有区别)。您应该使用new Thread(yourRunnable).start()代替。

尽管如此,请考虑使用ThreadPoolExecutor而不是一堆普通线程。