所以现在我已经在我的Application类中创建了一个ThreadPoolExecutor,它持有5个线程。 这是代码:
public class App extends Application {
private ThreadPoolExecutor mPool;
@Override
public void onCreate() {
super.onCreate();
mPool = (ThreadPoolExecutor)Executors.newFixedThreadPool(5);
}
}
同时我也有一种方法可以向执行器提交Runnable任务:
public void submitRunnableTask(Runnable task){
if(!mPool.isShutdown() && mPool.getActiveCount() != mPool.getMaximumPoolSize()){
mPool.submit(task);
} else {
new Thread(task).start();
}
}
所以当我想在我的代码中运行一个异步任务时,我获取App
的实例并调用submitRunnableTask
方法将runnable传递给它。正如您所看到的,我还检查线程池是否有空闲线程来执行我的任务,如果没有,我就创建一个新的线程(我不认为这会发生,但无论如何...我不希望我的任务在队列中等待并减慢应用程序速度)。
在Application的onTerminate
回调方法中,我关闭线程池。
所以我的问题是:这种模式比在代码中创建新线程更好吗?我的新方法有什么优缺点?它可能会引起我尚未意识到的问题吗?您能否向我提供比此更好的方式来管理我的异步任务?
P.S. 我在Android和Java方面有一些经验,但远非并发专家:)因此可能有些方面我对这类问题理解不够深刻。任何建议都将不胜感激。