2015-06-13 53 views
1

我可以在Android应用程序中同时运行多少个Java线程?我认为这将是一个架构依赖的东西,所以有没有一种方法来确定相同的?Android多线程

回答

2

我可以在Android应用程序中同时运行多少个Java线程?

这取决于你的“运行”和“同时”的定义。

您可以根据需要启动尽可能多的线程,主要受限于内存限制。

同时执行多少个线程取决于设备上活动核心的数量。

我认为这将是一个体系结构相关的事情

架构之外,也要看对什么是所有的事情,因为Android设备断电内核以节省电池电量,只要有可能。另外,根据线程在做什么(例如,阻塞I/O),拥有比内核更多的线程是合理的。

一个典型的多核线程池大小调整算法是使用2n + 1个线程,其中n是核心数。 AsyncTask uses this approach,例如:

private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); 
private static final int CORE_POOL_SIZE = CPU_COUNT + 1; 
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1; 

这里,线程池将增长到MAXIMUM_POOL_SIZE,这两次核(availableProcessors())加一的数量。

+0

所以,如果我有一个4核心的CPU。然后在任何特定的实例中,最多4个线程可以实际执行代码。尽管其他线程可能存在,但它们必须处于睡眠/等待状态,直到调度程序切换4个正在执行的线程之一。我的理解是否正确? –

+0

@DeepankarArya:正确,尽管在任何给定的点上,这些内核中的一个或多个可能会关闭,因此执行线程的数量可能少于*物理*内核数量。 – CommonsWare

+0

非常感谢! –