【LSP】J.U.C之Executor框架入门指引
1、Executor接口http://cdn.u1.huluxia.com/g4/M01/59/64/rBAAdl9trISAIO8xAACt4WdlvYs382.jpg
This interface provides a way of decoupling task submission from the mechanics of how each task will be run, including details of thread use, scheduling, etc.An {@code Executor} is normally used instead of explicitly creating threads.
For example, rather than invoking {@code new Thread(new(RunnableTask())).start()} for each of a set of tasks
executor框架是jdk1.5时引入的一个接口,主要目的是解耦任务的创建和任务的执行,在jdk1.5之前,我们用线程创建一个任务时,通常是这样 new Thread(new(RunnableTask())).start() ,当引入executor后我们这样来创建执行任务:
Executor executor = anExecutor;
executor.execute(new RunnableTask1());
executor.execute(new RunnableTask2());
但由于executor接口只定义了方法void execute(Runnable command) 而没有定义具体的实现,因而对于executor的不同实现,execute可能是创建一个新的线程并立即启动,有可能是使用已有的工作线程运行,或者可能将任务放入等待队列等待可用的工作线程。比如:
同步执行
class DirectExecutor implements Executor {
public void execute(Runnable r) {
r.run();
}
}}
异步执行
class ThreadPerTaskExecutor implements Executor {
public void execute(Runnable r) {
new Thread(r).start();
}
}}
排队执行
http://cdn.u1.huluxia.com/g4/M01/54/30/rBAAdl9pf3mAPPq3AAOSLPTeMEs808.jpg
4、Executors 工厂
对于上述3个接口,jdk1.5 都提供了默认的实现,但是如果用户自己去创建这些个默认实现的实例,就必须要了解这些默认实例的实现细节,而Executors 相当于就是一个简单工厂,通过提供一些简单的参数就可以创建出来我们想要的执行器。Executors为我们提供了五类执行器的创建:http://cdn.u1.huluxia.com/g4/M01/54/30/rBAAdl9pf3qAE_9tAAEbAw1PtQI538.jpg
元芳你怎么看? 支持你哈................................... 1v1飘过 撸过 支持黑科技
页:
[1]