2010-06-03 74 views
0

當的Android/Java的運行的線程:在Android/Java中我的線程是否需要信號燈?

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

是否確定要讓它運行,而不是使用旗語來阻止而沒有工作需要執行?

我只使用一個線程,所以我不需要線程間同步。

+1

我真的推薦你學習Java 5中引入的ExecutorService框架http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html。看起來像ThreadPool(你可以擁有SingleThread池)正是你在這裏需要的。 – 2010-06-03 19:14:54

回答

2

兩個線程可以獲得相同的下一個任務,並嘗試同時運行相同的任務。所以我會這麼想。

+0

也許我有點不清楚。我只會使用一個線程來排列我的作品。兩個線程之間沒有同步問題。 – Henrik 2010-06-03 18:52:09

+0

信號量用於限制多個線程訪問相同的代碼。所以如果只有一個線程在任何時候運行,那麼你應該沒問題。 – 2010-06-03 18:55:50

+0

好的,我在考慮信號量和線程會阻塞CPU,然後我會在將任務排隊執行之後釋放它。因此,一個沒有任何「阻塞」或睡眠循環的線程不會佔用CPU? – Henrik 2010-06-03 18:59:10

0

你至少應該在那裏睡一覺,這樣你就不會佔用cpu。

1

你可能會更好過:

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

getNextTask(),如果它的時間停止運行返回null。或者,檢查「任務== STOP_TASK」並將當前設置的任何代碼運行= false後STOP_TASK到任務隊列。

另一種方法是使用Thread.interrupt()來喚醒睡眠者,但是總覺得不知何故,這種感覺會很低落。 :-)

如果確實保留上述方法,請確保「正在運行」被聲明爲易失性,如果它可以被另一個線程修改。