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.util.Timer`或`java.util.concurrent.ScheduledExecutorService`来实现。通过这两个工具,开发者可以设置在特定时间执行关闭系统的任务,...
总结一下,Java中实现定时任务主要依靠`java.util.Timer`、`java.util.concurrent.ScheduledExecutorService`等原生API,以及一些第三方库如Quartz。在实际开发中,选择合适的定时任务解决方案需要考虑项目的复杂性...
- `java.util.concurrent.Executor`:这是最基本的执行器接口,只有一个 `execute(Runnable task)` 方法,用于提交任务。 - `java.util.concurrent.ExecutorService`:扩展了 `Executor`,提供了管理执行器生命周期...
这通常是通过Java中的`java.util.Timer`类或者`java.util.concurrent.ScheduledExecutorService`来实现的。这两个工具提供了不同的功能和使用场景,让我们一一进行深入探讨。 首先,我们来看`java.util.Timer`类。...
这里我们将深入探讨两种主要的方法:Java的`java.util.Timer`类和Java 5及以上版本引入的`java.util.concurrent.ScheduledExecutorService`接口。 首先,我们来了解`java.util.Timer`类。这个类允许开发者创建一个...
【标题】"javaalert_JAVA源码_" 暗示我们关注的是一个使用Java编程语言编写的关于提醒功能的程序。在Java中,创建一个定时提醒任务通常涉及到使用`java.util.Timer`类或`java.time`包中的定时器功能。让我们深入探讨...
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`注解,提供了更为...
此外,标签"源码"提示我们可能需要关注代码的实现细节,而"工具"可能意味着`BaseTask.java`可能包含了一些实用的方法或工具类,用于辅助任务的执行,例如日期时间处理、数据库操作等。 总的来说,`BaseTask.java`...
`java.util.concurrent.Executor`接口是Java并发库的核心,它定义了执行任务的抽象。Executors类提供了一些工厂方法,可以创建不同类型的线程池,如固定大小线程池、单线程池、缓存线程池和定长线程池。线程池可以...
Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来创建。通过继承Thread类或实现Runnable接口,我们可以创建自己的线程。例如,当我们实现Runnable接口时,我们需要重写`run()`方法,该方法...
3. **并发工具类**:Java并发包(java.util.concurrent)提供了丰富的并发工具类,如`ExecutorService`、`Future`、`Semaphore`、`CountDownLatch`、`CyclicBarrier`等,它们可以帮助我们更好地管理和控制并发执行的...
2. **Executor框架**:Java 5引入的`java.util.concurrent.Executor`框架简化了线程管理。它允许开发者通过ExecutorService创建线程池,提高了线程的复用性和资源管理效率。ExecutorService的`execute(Runnable)`...
Java从1.5版本开始引入了Executor框架,其中`java.util.concurrent.ExecutorService`是核心接口,`ThreadPoolExecutor`是最常用的实现。线程池可以有效管理线程,避免频繁创建和销毁线程带来的开销。 6. **中断...
`ExecutorService`是Java并发框架`java.util.concurrent`包中的核心接口,它提供了创建、管理和关闭线程池的功能。 以下是一个使用`ExecutorService`和`Future`来等待所有子线程完成的例子: ```java import java....
Java的`java.util.concurrent`包提供了线程池(ThreadPoolExecutor)来管理和控制并发执行的任务。我们可以通过创建一个固定大小的线程池,然后将每个URL的抓取任务提交给线程池: ```java ExecutorService ...
import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class ...
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秒执行一次...
1. **Executor框架**:Java并发工具包的核心是Executor框架,它基于`java.util.concurrent.Executor`接口。Executor接口定义了一个方法`execute(Runnable task)`,用于执行任务。ExecutorService是Executor的一个...