JDK1.5多线程温习概要

JDK1.5多线程复习概要
1, 新的三个包:
java.util.concurrent,java.util.concurrent.atomic,java.util.concurrent.locks
java.util.concurrent 包含了常用的多线程工具,是新的多线程工具的主体.
java.util.concurrent.atomic 包含了不用加锁情况下就能改变值的原子变量.
java.util.concurrent.locks 包包含锁定的工具.

2,Callable和Future接口
Callable 是类似于Runnable 的接口,Callable 和Runnable 有几点不同
Callable 规定的方法是call(),而Runnable 规定的方法是run().
Callable 的任务执行后可返回值,而Runnable 的任务是不能返回值的。
call()方法可抛出异常,而run()方法是不能抛出异常的。
        运行 Callable 任务可拿到一个Future 对象,通过Future 对象可了解任务
  执行情况,可取消任务的执行,还可获取任务执行的结果.

3,新的任务执行架构
主要由三个接口和其相应的具体类组成
接口:Executor,ExecutorService,ScheduledExecutorService
Executor:执行Ruannable 类型的任务
ExecutorService 主要方法有 submit(task),invokeAll(collection of tasks),shutdown ();shutdownNow();isTerminated

();isShutdown();
ScheduledExecutorService:提供了按时间安排执行任务的功能.

4,Executors 类,Executors 的工具类来得到Executor 接口的具体对象.Executors提供一些static的方法
callable(Runnable task): 将Runnable 的任务转化成Callable 的任务.

5,Lockers和Condition接口
ReentrantLock是Lock的具体类,方法有
lock();tryLock();(有返回值并带有时间参数)unlock();注意该方法必须手动去解锁。
ReadWriteLock 接口。为了提高效率有些共享资源允许同时进行多个读的操作,但只允许一个写的操作。
readLock(): 返回一个读的lock
writeLock(): 返回一个写的lock, 此lock 是排他的。
Condition接口
await():使调用此方法的线程放弃锁定,进入睡眠直到被打断或被唤醒。
signal(): 唤醒一个等待的线程
signalAll():唤醒所有等待的线程