利用jdk提供线程池执行任务写法, 主要是查看 API文档的 Executors 方法
package thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class ThreadPool { /** * 1 线程池中只有 1 有几个任务 2 创建了几个线程 * 2 创建任务后直接将任务丢给线程池 让线程池中的线程执行即可 执行完毕后 线程池内的线程不会死亡 会等待将来的任务 */ public static void main(String[] args) { //ExecutorService threadPool = Executors.newFixedThreadPool(3); 池子中线程数是固定3个 ExecutorService threadPool = Executors.newCachedThreadPool();//池子中线程随着任务增加会动态增加 //Executors.newSingleThreadExecutor(); 创建一个线程 如果此线程死亡 那么死亡之前会新建另一个线程 /*Executors.newScheduledThreadPool(3).scheduleAtFixedRate( 线程池中创建定时器 执行 new Runnable(){ @Override public void run() { System.out.println("bombing!"); }}, 6, 2, TimeUnit.SECONDS);*/ for(int i=0; i<10; i++){ final int task = i; threadPool.execute(new Runnable() { @Override public void run() { for(int j=0; j<10; j++) { try { Thread.sleep(70); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程: " + Thread.currentThread().getName() + " 执行第 " + task +"次任务" + "打印结果为: " + j); } } }); } System.out.println("all of 10 tasks have committed! "); //threadPool.shutdown(); 执行完线程后 池关闭 } }
线程池类关系图: