跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Java多线程中的Executor详解

Java多线程中的Executor定义了执行已提交Runnable任务的对象。该接口提供了一种将任务提交与如何运行每个任务的机制(包括线程使用、调度等细节)解耦的方法。它通常使用预先创建线程而不是创建线程。

例如new Thread(new(RunnableTask())).start() 每次都创建新线程来执行任务。

现在可以使用以下方式来执行任务:Executor executor = anExecutor;executor.execute(new RunnableTask1());然而,Executor接口并不严格要求异步执行,在一个简易测试中,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 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);}}}ExecutorService接口拓展Executor功能,这是一个更广泛的接口。

ThreadPoolExecutor类提供可扩展的线程池实现。

Executors类提供了方便的工厂方法。

内存一致性效应:在将可运行对象提交给执行程序之前发生的线程操作——在它开始执行之前,可能在另一个线程中。

到此这篇关于Java多线程中的Executor详解的文章就介绍到这了,更多相关Java的Executor内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Java定时任务ScheduledThreadPoolExecutor示例详解Java实现Executors类创建常见线程池Java中的线程池ThreadPoolExecutor深入解析Java中的线程池ThreadPoolExecutor细致讲解Java中的线程池ThreadPoolExecutor解析java ExecutorService CompletionService线程池区别与选择

相关文章