`

源码java.util.concurrent.Executor

 
阅读更多

Executor接口就一个方法void execute(Runnable command)

大致翻译下源码对类的注释

 

Executor对象用于执行提交的Runnable任务,这个接口提供了一种解藕提交上来的任务的运行方式(包括线程的使用,调度等)的方法。

Executor的使用主要用于替代直接明确的线程创建 比如:

相对于 new Thread(new (Runable Task())).start()这种为每个任务直接创建一个线程

Executor的处理方式是

Executor executor = new Executor();(实现)

executor.execute(new Runnable Task());

至于execute是如何处理每个任务则由各自的实现类去实现

 

Executor并没有严格要求说一定要异步的处理每个任务,举个简单的例子:

class DirectExecutor implements Executor {
    public void execute(Runnable r) {
      r.run();
    }
  }}

 这里executor就是立即执行提交的任务

 

当然普遍的是,任务会在其他线程执行,而不是调用线程:

class ThreadPerTaskExecutor implements Executor {
 *   public void execute(Runnable r) {
 *     new Thread(r).start();
 *   }
 * }}

 

Executor的许多实现会对任务的调用方式和调用时机做出限制,下面的例子中SerialExecutor将提交的任务队列的交给另一个executor,形成一个混合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);
 *     }
 *   }
 * }}

 

Executor在本包的几个实现如:ExecutorService 是一个对功能扩展的接口,ThreadPoolExecutor提供了一个扩展的线程池实现,Executors则为这些Executor提供了方便的工厂方法

 

内存一致性影响:根据happen-before原则,在任务提交给Executor的动作之前的动作一定在任务运行开始之前完成,或许(即使)任务在另一个线程执行

分享到:
评论

相关推荐

    java定时关机源码

    总结一下,Java定时关机源码主要涉及了Java的定时任务处理,可以使用`java.util.Timer`或`java.util.concurrent.ScheduledExecutorService`来实现。通过这两个工具,开发者可以设置在特定时间执行关闭系统的任务,...

    java定时执行方法&节拍器

    总结一下,Java中实现定时任务主要依靠`java.util.Timer`、`java.util.concurrent.ScheduledExecutorService`等原生API,以及一些第三方库如Quartz。在实际开发中,选择合适的定时任务解决方案需要考虑项目的复杂性...

    JAVA课程学习笔记.doc

    - `java.util.concurrent.Executor`:这是最基本的执行器接口,只有一个 `execute(Runnable task)` 方法,用于提交任务。 - `java.util.concurrent.ExecutorService`:扩展了 `Executor`,提供了管理执行器生命周期...

    java 实现调度器

    这通常是通过Java中的`java.util.Timer`类或者`java.util.concurrent.ScheduledExecutorService`来实现的。这两个工具提供了不同的功能和使用场景,让我们一一进行深入探讨。 首先,我们来看`java.util.Timer`类。...

    Java定时执行某个任务

    这里我们将深入探讨两种主要的方法:Java的`java.util.Timer`类和Java 5及以上版本引入的`java.util.concurrent.ScheduledExecutorService`接口。 首先,我们来了解`java.util.Timer`类。这个类允许开发者创建一个...

    javaalert_JAVA源码_

    【标题】"javaalert_JAVA源码_" 暗示我们关注的是一个使用Java编程语言编写的关于提醒功能的程序。在Java中,创建一个定时提醒任务通常涉及到使用`java.util.Timer`类或`java.time`包中的定时器功能。让我们深入探讨...

    JAVA定时任务

    executor.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS); // 立即开始,每5秒执行一次 } } ``` 除了使用Java内置的定时框架,我们还可以借助第三方库如Quartz和Spring框架的`@Scheduled`注解来实现定时任务...

    规定时间执行规定任务

    executor.scheduleAtFixedRate(task, 3, 5, TimeUnit.SECONDS); // 每隔5秒执行一次,首次延迟3秒后执行 } } ``` 除了Java自带的工具,还有一些流行的第三方库,如Quartz和Spring的`@Scheduled`注解,提供了更为...

    定时任务,JSP

    此外,标签"源码"提示我们可能需要关注代码的实现细节,而"工具"可能意味着`BaseTask.java`可能包含了一些实用的方法或工具类,用于辅助任务的执行,例如日期时间处理、数据库操作等。 总的来说,`BaseTask.java`...

    Java并发编程全套源码

    `java.util.concurrent.Executor`接口是Java并发库的核心,它定义了执行任务的抽象。Executors类提供了一些工厂方法,可以创建不同类型的线程池,如固定大小线程池、单线程池、缓存线程池和定长线程池。线程池可以...

    JAVA线程学习(源代码)

    Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来创建。通过继承Thread类或实现Runnable接口,我们可以创建自己的线程。例如,当我们实现Runnable接口时,我们需要重写`run()`方法,该方法...

    java并发编程实战源码,java并发编程实战pdf,Java源码.zip

    3. **并发工具类**:Java并发包(java.util.concurrent)提供了丰富的并发工具类,如`ExecutorService`、`Future`、`Semaphore`、`CountDownLatch`、`CyclicBarrier`等,它们可以帮助我们更好地管理和控制并发执行的...

    java并发编程-构建块

    2. **Executor框架**:Java 5引入的`java.util.concurrent.Executor`框架简化了线程管理。它允许开发者通过ExecutorService创建线程池,提高了线程的复用性和资源管理效率。ExecutorService的`execute(Runnable)`...

    Java的多线程

    Java从1.5版本开始引入了Executor框架,其中`java.util.concurrent.ExecutorService`是核心接口,`ThreadPoolExecutor`是最常用的实现。线程池可以有效管理线程,避免频繁创建和销毁线程带来的开销。 6. **中断...

    Java简单实现“主线程等待所有子线程完成再继续”

    `ExecutorService`是Java并发框架`java.util.concurrent`包中的核心接口,它提供了创建、管理和关闭线程池的功能。 以下是一个使用`ExecutorService`和`Future`来等待所有子线程完成的例子: ```java import java....

    浅谈Java多线程处理中Future的妙用(附源码)

    import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class ...

    java Thread & synchronized & concurrent 线程、同步、并发

    executor.submit(new Runnable() { @Override public void run() { // 执行任务 } }); ``` 除了`synchronized`,Java还提供了`java.util.concurrent.locks`包,其中包含`ReentrantLock`等高级锁,它们提供了更...

    页面控制定时任务源码

    executor.scheduleAtFixedRate(new Runnable() { @Override public void run() { // 执行你的定时任务 System.out.println("定时任务执行"); } }, 0, 5, TimeUnit.SECONDS); // 0秒后开始,然后每5秒执行一次...

    java并发工具包

    1. **Executor框架**:Java并发工具包的核心是Executor框架,它基于`java.util.concurrent.Executor`接口。Executor接口定义了一个方法`execute(Runnable task)`,用于执行任务。ExecutorService是Executor的一个...

    java并发编程实战pdf及源码.zip

    3. **并发工具类**:Java并发库(java.util.concurrent)提供了一系列高效的并发工具,如`ExecutorService`和`Future`用于管理线程池,`Semaphore`用于控制并发访问的数量,`BlockingQueue`用于线程间的数据传递等。...

Global site tag (gtag.js) - Google Analytics