package sample;/** * 线程池负责管理工作线程,包含一个等待执行的任务队列。 * 线程池的任务队列是一个Runnable集合,工作线程负责从任务队列中取出并执行Runnable对象。 * java.util.concurrent.executors 提供了 java.util.concurrent.executor 接口的一个Java实现,可以创建线程池。下面是一个简单示例: * 首先创建一个Runable 类: * @author markGao * */public class WorkerThread implements Runnable { private String command; public WorkerThread(String s) { this.command = s; } public void run() { System.out.println(Thread.currentThread().getName() + " Start. Command = " + command); processCommand(); System.out.println(Thread.currentThread().getName() + " End."); } private void processCommand() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public String toString() { return this.command; }}
package sample;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 从 Executors 框架中创建固定大小的线程池 * @author markGao * */public class SimpleThreadPool { public static void main(String[] args) { /** * 在上面的程序中,我们创建了包含5个工作线程的固定大小线程池。 * 然后,我们向线程池提交10个任务。 * 由于线程池的大小是5,因此首先会启动5个工作线程,其他任务将进行等待。 * 一旦有任务结束,工作线程会从等待队列中挑选下一个任务并开始执行。 */ ExecutorService executor = Executors.newFixedThreadPool(5); for (int i = 1; i < 11; i++) { Runnable worker = new WorkerThread("Thead No: " + i); executor.execute(worker); } executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("Finished all threads"); }}