0

Android/Java でスレッドを実行する場合:

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

作業を実行する必要がない間、セマフォを使用してブロックせずに実行しても問題ありませんか?

私は 1 つのスレッドしか使用していないため、スレッド間の同期は必要ありません。

4

3 に答える 3

2

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 を返します。または、「タスク == STOP_TASK」を確認し、現在 running=false に設定されているコードがあれば、タスク キューに STOP_TASK をポストします。

もう 1 つのアプローチは、Thread.interrupt() を使用してスリーパーを起こすことですが、これは常になんとなく下品に感じられます。:-)

上記のアプローチを維持する場合は、別のスレッドによって変更できる場合は、「実行中」が揮発性であると宣言されていることを確認してください。

于 2010-06-04T23:24:04.627 に答える
0

CPUを独り占めしないように、少なくともそこにスリープを入れる必要があります。

于 2010-06-03T18:51:29.127 に答える