注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

Executor  

2010-10-05 16:28:42|  分类: JAVA执行器 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Executor
java.util.concurrent
接口 Executor
所有已知子接口:
    ExecutorService, ScheduledExecutorService
所有已知实现类:
    AbstractExecutorService, ScheduledThreadPoolExecutorThreadPoolExecutor
它用于执行Runnable任务。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。
通常使用Executor而不是显式地创建线程。
例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 new Thread(new(RunnableTask())).start():
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的实现都对调度任务的方式和时间强加了某种限制。以下执行程序使任务提交与第二个执行程序保持连续,这说明了一个复合执行程序。
示例1
 class SerialExecutor implements Executor {
   
final Queue tasks = new ArrayDeque();
   
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);
     
}
   
}
 
}}
 注意1:许多Executor的实现都对调度任务的方式和时间强加了某种限制。
 所以如果我们想要任务一个一个的顺序被执行,可以才采用示例1(SerialExecutor)的方式
 此包中提供的Executor实现都实现了ExecutorService,ExecutorService是Executor的一个子类,它提供了一个使用更广泛的接口。
比如ThreadPoolExecutor类就同时实现了Executor和ExecutorService接口,它提供一个可扩展的线程池实现。
Executors类为创建这些Executor提供了便捷的工厂方法。
注意:Executor的直接子接口ExecutorService, ExecutorService的直接子接口(Executor的间接子接口)ScheduledExecutorService提供了更为广泛使用的接口。
            关于ExecutorService的更多知识请参阅《ExecutorService》, 
            关于ScheduledExecutorService的更多知识请参考《ScheduledExecutorService》。
内存一致性效果:线程中将 Runnable 对象提交到 Executor 之前的操作 happen-before 其执行开始(可能在另一个线程中)。 
主要方法
void execute(Runnable command)
    在未来某个时间执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中执行,这由 Executor 实现决定。
    参数:
        command - 可运行的任务 
    抛出:
        RejectedExecutionException - 如果不能接受执行此任务。 
        NullPointerException - 如果命令为 null
注意:该方法是它自己唯一的方法。
  评论这张
 
阅读(736)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017