Java 1.5并发包之二:任务与线程池

从Java 1.5开始,并发的最大特点是将线程的创建和管理与具体任务的执行分离,线程的创建和管理单独交给了专门线程池。

1. 具体要执行的任务

任务对象往往是在一个线程中创建,然后交给另一个线程执行。

java.lang.Runnable接口
传统接口,不能返回值,也不能抛出checked的异常
java.util.concurrent.Callable<V>接口
可以返回值V,也可以抛出checked的异常Exception

2. 线程池,将线程的创建与管理独立出来,开发人员在Java应用中直接使用。

1)常用线程池

java.util.concurrent.Executor接口,执行提交了的Runnable任务
void execute(Runnable command);//接口中的唯一方法

无需直接创建线程对象并启动执行任务(创建任务,并提交执行)
将任务的提交与任务的执行分离
只要通过Executor接口的execute(new RunnableTask...())方法即可执行任务


java.util.concurrent.ExecutorService接口,扩展了Executor接口,可以终止任务的执行
void shutdown();//不再接受新任务,等待已有任务执行完毕后终止
List<Runnable> shutdownNow();//立刻终止所有任务的执行
Future<?> submit(Runnable task);//扩展了Executor接口的execute()方法,提交任务


java.util.concurrent.ScheduledExecutorService接口,扩展了ExecutorService接口,可以定时或周期性执行任务


2)定制线程池

java.util.concurrent.ThreadPoolExecutor类,扩展自java.util.concurrent.AbstractExecutorService抽象类

扩展该类,可以定制Executor新特性


3)java.util.concurrent.Executors工具类
以静态工厂方法的形式,创建各种Executor接口实例。
static ExecutorService newFixedThreadPool(int nThreads);//固定大小的线程池
static ExecutorService newCachedThreadPool();//可扩展大小的线程池,适合短小任务

static ExecutorService newSingleThreadExecutor();//同时只能执行一个任务


你可能感兴趣的:(java,线程,并发,线程池)