标签:img int ima mil div 获取 catch tor util
为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用。
用线程时从线程池中获取,用完以后不销毁线程,而是归还给线程池。
为了更好的控制多线程,JDK 提供了一套线程池框架,结构如下图所示
它们都在 java.util.concurrent 包中。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by zhengbin on 2017/10/24 */ public class ExecutorServiceTest { private static class Task implements Runnable { public void run() { System.out.println(System.currentTimeMillis() + ":Thread ID:" + Thread.currentThread().getId()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Task t = new Task(); ExecutorService executorService = Executors.newFixedThreadPool(5); for (int i = 0; i < 10;i++) { executorService.execute(t); } executorService.shutdown(); } }
1509258535474:Thread ID:11 1509258535474:Thread ID:12 1509258535475:Thread ID:14 1509258535475:Thread ID:15 1509258535475:Thread ID:13 1509258536475:Thread ID:15 1509258536475:Thread ID:11 1509258536475:Thread ID:12 1509258536475:Thread ID:14 1509258536475:Thread ID:13
主线程创建了一个固定大小的线程池,线程池的容量是 5。
运行结果输出了运行的时间戳,可以看到,前 5 个任务执行的时间戳与后 5 个任务的时间戳相差了 1000 毫秒。
这说明在这 10 个任务中,是分成 2 批次执行的。这也完全符合一个只有 5 个线程的线程池的行为。
当把线程池改为 newCachedThreadPool() 时,就会将 10 个任务同时执行。
标签:img int ima mil div 获取 catch tor util
原文地址:http://www.cnblogs.com/zhengbin/p/7750077.html