您的位置:首页 > 编程语言 > Java开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: