2015-05-18 13 views

Trả lời

4

Chọn số lượng Threads dựa trên số lượng bộ xử lý là một giải pháp khá tốt vì nó cân dựa trên phần cứng của thiết bị đang chạy ứng dụng. Một ví dụ điển hình của việc này có thể được tìm thấy trong source code của AsyncTask:

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; 
private static final int KEEP_ALIVE = 1; 

private static final ThreadFactory sThreadFactory = new ThreadFactory() { 
    private final AtomicInteger mCount = new AtomicInteger(1); 

    public Thread newThread(Runnable r) { 
     return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); 
    } 
}; 

private static final BlockingQueue<Runnable> sPoolWorkQueue = 
     new LinkedBlockingQueue<Runnable>(128); 

public static final Executor THREAD_POOL_EXECUTOR 
     = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, 
     TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory); 

tôi sẽ coi đây là một giải pháp thực hành tốt nhất.

Bạn có thể xem mã nguồn của AsyncTaskhere nếu bạn muốn có ý tưởng tốt hơn về cách chúng sử dụng ThreadPoolExecutor.

Các vấn đề liên quan