java JDK 1.5 线程池学习笔记
2012-08-19 11:02
162 查看
java JDK 1.5 线程池学习笔记
1、Executor 接口:
继承结构的最顶端 所有线程池都是继承他
2、Executors 类:
有关Executor 操作的工具类。它可以创建一些系统默认的ExecutorService如
newCachedThreadPool() 方法
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而 言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。
newFixedThreadPool(int nThreads)方法
nThreads - 池中的线程数
创建一个可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。
newSingleThreadScheduledExecutor 方法
corePoolSize - 池中所保存的线程数,即使线程是空闲的也包括在内。
创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程会代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 newScheduledThreadPool(1) 不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。
newScheduledThreadPool(int corePoolSize)方法
创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
3、ExecutorService 接口:
该类是Executor的子接口,最大功能就是execute() 添加任务
4、ThreadPoolExecutor 类:
该类是ExecutorService 接口的子类,是具体负责线程池的类,该类和Executors.newCachedThreadPool()方法创建的ExecutorService对象是基本相同的只不过提供了更加细粒话的参数配置
5、通过 callable 接口 的实现类,通过executorService.submit(Callable c)方法提交线程池执行的线程任务,线程执行完毕返回Object执行结果。
_____________________________________
1. 采用一个拥有两个线程执行所需要的时间一定比一个线程的进程执行两次所需要的时间要长。即采用多线程不会提高程序执行速度,反而会降低。但是对于用户来说,可以减少用户的响应时间。上述结果只是针对单CPU,如果对于多CPU或者CPU采用超线程技术的花,还是会提高程序执行速度的。
2. Join()方法可以让一个线程等待另一个线程的完成。如果t1,t2是两个Thread对象,在t1中调用t2.join(),会导致t1线程暂停执行,直到t2的线程终止。
3. Java有两种Thread:“守护线程Daemon”与“用户线程User”。
从字面上我们很容易将守护线程理解成是由虚拟机(virtual machine)在内部创建的,而用户线程则是自己所创建的。事实并不是这样,任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开:
用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。
守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon方法将测试该线程是否为守护线程。值得一提的是,当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。
4. Java 提供一种同步机制,他不提供对锁的独占访问,但同样可以确保对变量的每一个读取操作都返回最近写入的值,这种机制就是volatile变量
5. ThreadLocal类:当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
6. Java.util.concurrent.atomic 提供了原子变量的9种风格(AtomicInteger, AtomicLong, AtomicReference, AtomicBoolean)。原子变量类可以认为是volatile变量的泛化,它扩展了volatile变量的概念,来支持原子条件的比较并设置更新。
7. 原子变量类 并发集合, 同步器,
锁
AtomicInteger BlockingQuene Semaphore, Barrier, ReentrantLock
AtomicBoolean ConcurrentMap CountDownLatch,Exchanger,Future,FutureTask ReadWriteLock
1、Executor 接口:
继承结构的最顶端 所有线程池都是继承他
2、Executors 类:
有关Executor 操作的工具类。它可以创建一些系统默认的ExecutorService如
newCachedThreadPool() 方法
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而 言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。
newFixedThreadPool(int nThreads)方法
nThreads - 池中的线程数
创建一个可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。
newSingleThreadScheduledExecutor 方法
corePoolSize - 池中所保存的线程数,即使线程是空闲的也包括在内。
创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程会代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 newScheduledThreadPool(1) 不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。
newScheduledThreadPool(int corePoolSize)方法
创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
3、ExecutorService 接口:
该类是Executor的子接口,最大功能就是execute() 添加任务
4、ThreadPoolExecutor 类:
该类是ExecutorService 接口的子类,是具体负责线程池的类,该类和Executors.newCachedThreadPool()方法创建的ExecutorService对象是基本相同的只不过提供了更加细粒话的参数配置
5、通过 callable 接口 的实现类,通过executorService.submit(Callable c)方法提交线程池执行的线程任务,线程执行完毕返回Object执行结果。
_____________________________________
1. 采用一个拥有两个线程执行所需要的时间一定比一个线程的进程执行两次所需要的时间要长。即采用多线程不会提高程序执行速度,反而会降低。但是对于用户来说,可以减少用户的响应时间。上述结果只是针对单CPU,如果对于多CPU或者CPU采用超线程技术的花,还是会提高程序执行速度的。
2. Join()方法可以让一个线程等待另一个线程的完成。如果t1,t2是两个Thread对象,在t1中调用t2.join(),会导致t1线程暂停执行,直到t2的线程终止。
3. Java有两种Thread:“守护线程Daemon”与“用户线程User”。
从字面上我们很容易将守护线程理解成是由虚拟机(virtual machine)在内部创建的,而用户线程则是自己所创建的。事实并不是这样,任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开:
用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。
守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon方法将测试该线程是否为守护线程。值得一提的是,当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。
4. Java 提供一种同步机制,他不提供对锁的独占访问,但同样可以确保对变量的每一个读取操作都返回最近写入的值,这种机制就是volatile变量
5. ThreadLocal类:当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
6. Java.util.concurrent.atomic 提供了原子变量的9种风格(AtomicInteger, AtomicLong, AtomicReference, AtomicBoolean)。原子变量类可以认为是volatile变量的泛化,它扩展了volatile变量的概念,来支持原子条件的比较并设置更新。
7. 原子变量类 并发集合, 同步器,
锁
AtomicInteger BlockingQuene Semaphore, Barrier, ReentrantLock
AtomicBoolean ConcurrentMap CountDownLatch,Exchanger,Future,FutureTask ReadWriteLock
相关文章推荐
- 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal
- 【JavaSE学习笔记】多线程02_Lock,死锁,等待唤醒机制,线程组和线程池,Timer定时器
- Java学习笔记(74)------------线程池
- JDK 1.5 新特性学习笔记(3)
- Android-Universal-Image-Loader 学习笔记(五)线程池分析
- #数据结构与算法学习笔记#剑指Offer1.5:二维数组中的查找(C++)
- 多线程学习笔记2 线程池
- Java学习笔记之线程池
- 线程池学习笔记 (初识线程池...)
- 黑马程序员_学习笔记7可变参数的应用及1.5增强for的联合使用以及反射的总结
- Android中的线程池(学习笔记)
- 1.5 推荐优秀书籍 - 网站重构与Web标准设计 - 学习笔记
- 线程池-学习笔记
- JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法
- GIT学习笔记——1.5 起步 - 初次运行 Git 前的配置
- 线程池与ThreadPoolExecutor学习笔记
- JDK 1.5 新特性学习笔记(2)
- java 多线程学习笔记4-线程组 线程池 适配器
- Python学习笔记(五) -- Python线程池
- Joomla1.5学习笔记