2010-06-03 78 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()来唤醒睡眠者,但是总觉得不知何故,这种感觉会很低落。 :-)

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