深入学习JDK 线程池(之三)
2014-03-09 11:24
337 查看
一、环境准备
由于本章节主要是向大家介绍线程池的内部实现逻辑,需要进行断点调试跟踪JDK的源代码,而默认下载的JDK版本,断点调试时无法显示变量的值,所以需要大家另外下载debug版的JDK,并设置在eclipse开发环境中,有许多前辈已经分享过安装配置debug jdk的经验了,这儿就不再赘述了。
二、演示代码
演示代码非常简易,非常简单的实现,分三个类:一个Runnable实现类,一个Callable实现类,一个Client类。主要是引导大家开启调试源码的入口。
三、基本思路
1、分析线程池实现的整体结构,包括主要的内部类,成员变量和实现方法。
2、宏观地分析线程池的主要方法,如newXXXThreadPool(...),execute(...),submit(...),shutdown(...),观察类似功能的方法 ,是否有相互调用的情况,其中newXXXThreadPool(...)已经在前面的章节讲解过。
3、使用断点调试进行跟踪线程池执行的流程。
由于本章节主要是向大家介绍线程池的内部实现逻辑,需要进行断点调试跟踪JDK的源代码,而默认下载的JDK版本,断点调试时无法显示变量的值,所以需要大家另外下载debug版的JDK,并设置在eclipse开发环境中,有许多前辈已经分享过安装配置debug jdk的经验了,这儿就不再赘述了。
二、演示代码
演示代码非常简易,非常简单的实现,分三个类:一个Runnable实现类,一个Callable实现类,一个Client类。主要是引导大家开启调试源码的入口。
/** * Runnable对象 * 为了简便,run()方法内只是休眠了3秒,然后打印该对象 */ public class CountThread implements Runnable { private static long counter = 0; private final long id = counter++; @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(this); } @Override public String toString() { return "CountThread: " + id; } }
/** * Callable对象 * 为了简便,run()方法内只是休眠了3秒,然后返回该对象 */ public class CountTask implements Callable<String> { private static long counter = 0; private final long id = counter++; @Override public String call() throws Exception { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return this.toString(); } @Override public String toString() { return "CountTask: " + id; } }
/** * 线程池特性演示类 */ public class ThreadPoolFeature { public static void main(String[] args) { //创建线程池,由Executors产生不同的线程池,目前为CachedThreadPool ExecutorService exec = Executors.newCachedThreadPool(); List<Future<String>> fs = new ArrayList<Future<String>>(); for (int i = 0; i < 10; i++) { //验证Runnable和Callabe两种线程对象 exec.execute(new CountThread()); fs.add(exec.submit(new CountTask())); } try { for (Future<String> f : fs) { System.out.println(f.get()); } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } //关闭线程池 exec.shutdown(); } }
三、基本思路
1、分析线程池实现的整体结构,包括主要的内部类,成员变量和实现方法。
2、宏观地分析线程池的主要方法,如newXXXThreadPool(...),execute(...),submit(...),shutdown(...),观察类似功能的方法 ,是否有相互调用的情况,其中newXXXThreadPool(...)已经在前面的章节讲解过。
3、使用断点调试进行跟踪线程池执行的流程。
相关文章推荐
- 深入学习JDK 线程池(之六)
- 深入学习JDK 线程池(之一)
- 深入学习JDK 线程池(之五)
- 深入学习JDK 线程池(之四)
- 深入学习JDK 线程池(之七)
- 深入学习JDK 线程池(之二)
- JDK学习---深入理解java中的HashMap、HashSet底层实现
- 深入学习java并发编程:线程池ThreadPoolExecutor实现以及使用
- JDK源码走读之深入理解线程池(ThreadPoolExecutor)
- Java 并发编程深入学习——线程池及其实现原理
- JDK线程池学习笔记-1
- JDK学习---深入理解java中的LinkedList
- 线程池的学习与深入研究
- JAVA jdk 线程池学习笔记
- 线程池深入学习
- [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
- JDK学习---深入理解Comparator、TreeSet、TreeMap为什么可以排序
- 二,从ConcurrentHashMap类学习高并发程序的设计思路【深入JDK源码】
- 深入理解线程池--JDK1.8
- [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)