在Android / Java中我的线程是否需要信号量?

时间:2010-06-03 18:48:29

标签: java android multithreading runnable

在Android / Java中运行线程时:

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

是否可以让它运行并且不使用信号量来阻止而不需要执行任何工作?

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

你可能会更好:

public void run()
{
  while (true) {
    task = getNextTask();  // blocks until task available
    if (task == null)
      break;
  }
}
如果是时候停止运行,

getNextTask()会返回null。或者,检查“task == STOP_TASK”并将当前设置的任何代码运行=假发后STOP_TASK到任务队列。

另一种方法是使用Thread.interrupt()来唤醒一个睡眠者,但总会觉得自己很邋.. : - )

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

答案 2 :(得分:0)

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