JDK7中Executor源码概述
来源:互联网 发布:大淘客口令源码下载 编辑:程序博客网 时间:2024/05/19 20:44
Executor是java.util.concurrent包下的接口,它的已知子接口有:ExecutorService,ScheduledExecutorService,已知实现类有:AbstractExecutorService,ScheduledThreadPoolExecutor,ThreadPoolExecutor。
executor.execute(new RunnableTask2());
Executor接口并没有严格地要求执行是异步的。在最简单的情况下,执行程序可以在调用者的线程中立即运行已提交的任务:
class DirectExecutor implements Executor {
public void execute(Runnable r){
r.run();
}
}
更常见的是,任务是在某个不是调用者线程的线程中执行的。以下执行程序将为每个任务生成一个新线程。
class ThreadPerTaskExecutor implements Executor {
public void execute(Runnable r) {
new Thread(r).start();
}
}
许多Executor实现都对调度任务的方式和时间强加了某种限制。以下执行程序使任务提交与第二个执行程序保持连续,这说明了一个复合执行程序。
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
final Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
public synchronized void execute(final Runnable r) {
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
if (active == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
}
在java.util.concurrent包中提供的Executor实现,实现了ExecutorService,这是一个使用更广泛的接口。ThreadPoolExecutor类提供一个可扩展的线程池实现。Executors类为这些Executor提供了便捷的工厂方法。
内存一致性效果:线程中将Runnable对象提交到Executor之前的操作happen-before其执行开始(可能在另一个线程中)。
Executor只提供了void execute(Runnable command)方法:在未来某个时间执行给定的命令。该命令可能在新的线程,已入池的线程或者正调用的线程中执行,这由Executor实现决定。
参数:command-可运行的任务
Executor执行已提交的Runnable任务的对象,提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用Executor而不是显式地创建线程。使用方法如下:Executor executor = anExecutor;
executor.execute(new RunnableTask1());executor.execute(new RunnableTask2());
Executor接口并没有严格地要求执行是异步的。在最简单的情况下,执行程序可以在调用者的线程中立即运行已提交的任务:
class DirectExecutor implements Executor {
public void execute(Runnable r){
r.run();
}
}
更常见的是,任务是在某个不是调用者线程的线程中执行的。以下执行程序将为每个任务生成一个新线程。
class ThreadPerTaskExecutor implements Executor {
public void execute(Runnable r) {
new Thread(r).start();
}
}
许多Executor实现都对调度任务的方式和时间强加了某种限制。以下执行程序使任务提交与第二个执行程序保持连续,这说明了一个复合执行程序。
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
final Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
public synchronized void execute(final Runnable r) {
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
if (active == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
}
在java.util.concurrent包中提供的Executor实现,实现了ExecutorService,这是一个使用更广泛的接口。ThreadPoolExecutor类提供一个可扩展的线程池实现。Executors类为这些Executor提供了便捷的工厂方法。
内存一致性效果:线程中将Runnable对象提交到Executor之前的操作happen-before其执行开始(可能在另一个线程中)。
Executor只提供了void execute(Runnable command)方法:在未来某个时间执行给定的命令。该命令可能在新的线程,已入池的线程或者正调用的线程中执行,这由Executor实现决定。
参数:command-可运行的任务
抛出:RejectedExecutionException-如果不能接受执行此任务,NullPointerException-如果命令为null
实现可参考:https://github.com/chunericli/wise-utils
阅读全文
0 0
- JDK7中Executor源码概述
- JDK7中Condition源码概述
- JDK7中Lock源码概述
- JDK7中ReadWriteLock源码概述
- JDK7中ExecutorService源码概述
- JDK7中Executors源码概述
- JDK7中ThreadPoolExecutor源码概述
- JDK7中Runnable和Callable源码概述
- JDK7中BlockingQueue和Queue源码概述
- JDK7中ThreadFactory和RejectedExecutionHandler源码概述
- JDK7中Future,FutureTask和RunnableFuture源码概述
- JDK7中LockSupport源码解析
- JDK7中AtomicInteger源码解析
- JDK7中ArrayBlockingQueue源码解析
- JDK7中LinkedBlockingQueue源码解析
- JDK7中SynchronousQueue源码解析
- SparkSubmit 提交作业源码流程粗略概述(含application中 driver、client、 executor的创建)
- Executor 概述
- WEB前端常用框架
- 求二叉树高度
- 将JDK安装版改成非安装版
- python3 beautifulSoup 支持问题
- 链表的初始化、遍历、删除、插入、判断是否为空、求长度 C语言实现
- JDK7中Executor源码概述
- csv文件导入mysql数据库
- 什么是WTL?
- java object类中的默认方法
- 市面上的BT内核和p2p播放器源码
- CUICatalog: Invalid asset name supplied: '' 解决办法
- Hadoop 读写文件源码分析
- 这几个绝招教你轻松学IT
- 3种交叉验证