我有1个问题和2个实施选项,我想知道哪个是Android环境中最好的(基本最佳做法,哪个使用更少的电池)。
我的问题: 我有4个Runnable实现,Runnable有一个需要在不同线程中执行的任务列表。 那些Runnable将在很长一段时间内没有任务,然后执行很多任务(每个Runnable按顺序执行他们的任务),然后很长时间没有任何事情等等......
第一次实施
我的第一个实现是创建4个线程。每个线程都有1个Runnable。每个线程都运行所有任务,当列表为空时,Runnable暂停线程(使用wait()),当另一个任务被添加到列表中时线程被唤醒(使用notify())。 以下是Runnable的运行方法的代码:
public void run() {
while (!terminated) {
while ( taskList.size()> 0 ) {
Task task = taskList.get(0);
taskList.remove(task);
handleTask(task);
}
synchronized(taskList) {
if (taskList.size()==0)
taskList.wait();
}
}
}
第一个问题:处于暂停状态的线程是否使用了大量资源?
第二次实施
在我的第二个实现中,我考虑使用Executors.newCachedThreadPool()(如在AsyncTask实现中)。基本上,当我的Runnable有任务要运行时,我会向一个线程询问一个线程,系统负责为我提供一个可用线程并在一段时间不活动后将其销毁。 因为我的4 Runnable将有很长一段时间没有任务(execpt可能是1 Runnable)我很确定我的池的行为将是这样的:
线程可能永远不会被重用(除非我设置了很长一段时间不活动)。
那么什么是最佳选择?只有4个线程将大部分时间用于暂停状态或创建/销毁大量线程但仅在我需要时才使用它们。
感谢您的帮助,
JimBoy。
答案 0 :(得分:0)
让您的线程处于暂停状态。这样,他们就不会占用任何资源。除非有工作要做,否则不要让线程忙。
然而,看看你在那里做了什么,听起来你可能想要查看BlockingQueue的子类。