0

在 Android/Java 中运行线程时:

public void run()
{
   while (running)
   {
      if (moreTasksToExec())
      {
         task = getNextTask()
         task.exec();
      }
   }
}

在不需要执行任何工作的情况下让它运行而不使用信号量阻塞是否可以?

我只使用一个线程,所以我不需要线程间同步。

4

3 回答 3

2

两个线程可能会获得相同的下一个任务并尝试同时运行相同的任务。所以我会这么认为。

于 2010-06-03T18:50:38.490 回答
1

你可能会更好:

public void run()
{
  while (true) {
    task = getNextTask();  // blocks until task available
    if (task == null)
      break;
  }
}

如果该停止运行,getNextTask() 将返回 null。或者,检查“task == STOP_TASK”并将当前设置 running=false 的任何代码将 STOP_TASK 发布到任务队列中。

另一种方法是使用 Thread.interrupt() 来唤醒睡眠者,但这总是让人觉得有些低俗。:-)

如果您确实保留了上述方法,请确保“正在运行”被声明为 volatile(如果它可以被另一个线程修改)。

于 2010-06-04T23:24:04.627 回答
0

你至少应该在那里睡觉,这样你就不会占用 CPU。

于 2010-06-03T18:51:29.127 回答