方法1:Java自带的线程池
采用Executors的factory method创建了固定大小的线程池,采用execute()方法添加Runnable Task。
1 ExecutorService threadPool = Executors.newFixedThreadPool(2); 2 for (int i = 0; i < 4; i++) 3 threadPool.execute(new InnerWork(i + "")); 4 threadPool.shutdown();
内部实现是采用LinkedBlockingQueue。
/** * Creates a thread pool that reuses a fixed number of threads * operating off a shared unbounded queue. At any point, at most * <tt>nThreads</tt> threads will be active processing tasks. * If additional tasks are submitted when all threads are active, * they will wait in the queue until a thread is available. * If any thread terminates due to a failure during execution * prior to shutdown, a new one will take its place if needed to * execute subsequent tasks. The threads in the pool will exist * until it is explicitly {@link ExecutorService#shutdown shutdown}. * * @param nThreads the number of threads in the pool * @return the newly created thread pool * @throws IllegalArgumentException if <tt>nThreads <= 0</tt> */ public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }