`
cloverprince
  • 浏览: 129472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Executor介绍

    博客分类:
  • Java
阅读更多
介绍Java的ThreadPoolExecutor

Java1.5提供了java.util.concurrent.*;以方便多线程编程。

interface Executor是一个接口。你可以理解成你的一个“奴隶管理器”。你把可以异步执行的作业,封装成一个个的Runnable对象。只要你把这些Runnable对象仍给Executor,它就会用合适的方法帮你执行这些作业,你不用关心这个Executor究竟是用几个线程执行你的这些作业的。

举一个例子。请看下面的程序。一行一行读,包括注释。

package tpe; //包的名字不重要。
import java.util.concurrent.*; // 这里有你想要的所有好东西。

/**
 * 还记得我说过,作业就是Runnable吧。我们来定义这样一个简单的作业:
 */
class DivideNumbersJob implements Runnable {
	
	int a,b;

	/**
	 * 作业定义如下:输入两个整数a和b。
	 * @param a 被除数
	 * @param b 除数
	 */
	public DivideNumbersJob(int a, int b) {
		this.a = a;
		this.b = b;
	}

	/**
	 * 作业要做的工作当然在run()方法中。
	 * 我们的具体任务呢……
	 */
	@Override
	public void run() {
		// 就是计算a除以b的商,
		int c = a/b;
		// 还有a除以b的余数,
		int d = a%b;
		// 并打印到屏幕上。
		System.out.format("%d / %d === %d mod %d\n", a, b, c, d);
	}
}

/**
 * 下面是我们的主类。
 */
public class TPEDemo {
	public static void main(String[] args) throws Exception {
		// 我们先创建一个Executor。这是一个ThreadPoolExecutor,会利用线程池来并行地
		// 完成你交给它的作业。构造函数不是很有趣,可以忽略。
		ThreadPoolExecutor e = new ThreadPoolExecutor(5, 5, 0,
				TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
		
		// 然后,只要创造作业,丢给它就可以了。
		e.execute(new DivideNumbersJob(6, 2));
		
		// 虽然我们顺序加入,但按什么顺序执行,就看Executor的实现了。
		e.execute(new DivideNumbersJob(12, 5));
		e.execute(new DivideNumbersJob(100, 3));
		
		// 最后,告诉它,没有更多的作业了。如果你都执行完了,可以把自己关掉。
		// 如果不这样,这个线程池永远是活跃的。
		e.shutdown();
	}

}


看看程序执行的结果:
引用

12 / 5 === 2 mod 2
100 / 3 === 33 mod 1
6 / 2 === 3 mod 0


看的出来,结果出现的顺序并不是我们丢给它的顺序。
分享到:
评论

相关推荐

    spark:Executor分配详解

    本文详细介绍了Spark集群中Executor的分配机制及其在资源管理和数据处理方面的作用。合理的Executor配置不仅可以提高任务执行效率,还能有效避免资源浪费和性能瓶颈问题。在实际部署Spark集群时,开发者应该根据具体...

    1、azkaban介绍、三种(solo-server、two-server和multiple-executor)部署方式及验证

    3. Multiple-Executor Mode:在大型或分布式环境中使用,Web Server和多个Executor Server分布在不同的机器上,同样使用MySQL数据库,提供更高的可扩展性和容错性。 部署Azkaban的Solo Server模式通常涉及以下几个...

    azkaban 3.4 编译后安装文件,分布式多executor(赠送安装文档)

    7. **客户端使用**:介绍如何使用Azkaban的Web界面提交作业,或者通过命令行工具(如`azkaban-client`)进行交互。 8. **监控与日志**:阐述如何查看Azkaban的运行状态,包括作业执行情况、错误日志、性能指标等。 ...

    Java Executor 框架的实例详解

    一、Executor 框架的介绍 Executor 框架是 Java 中一个高级的并发编程模型,提供了一种标准的方式来提交和执行任务。Executor 框架的主要组件包括 Executor 接口、ExecutorService 接口、ThreadPoolExecutor 类、...

    go-executor-example-master

    总的来说,"go-executor-example-master" 是一个全面介绍如何在 Go 中构建执行器的项目,涵盖了从基本的进程管理到高级的并发和错误处理策略等多个方面。通过这个项目,开发者可以学习到 Go 语言在实现这类系统级...

    Console Process Executor

    这段代码介绍了如何在Java中调用操作系统中的可执行命令,产将其标准输出及错误输出保存在文件中。

    针对于Executor框架,Java API,线程共享数据

    下面将详细介绍使用Executor框架的主要好处: - **简化线程管理**:Executor框架简化了线程的创建和管理过程。开发者无需关心底层的线程细节,只需关注任务的提交和执行即可。这极大地降低了多线程编程的难度。 - *...

    并发编程实践,全面介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

    本文将全面介绍Java并发编程的基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具以及Executor服务。 1. **基础知识** - **并发与并行**:并发是指多个任务在同一时间段内交替执行,...

    Azkaban报错-azkaban.executor.ExecutorManagerException: No active executors found

    主要介绍了Azkaban报错-azkaban.executor.ExecutorManagerException: No active executors found,本文给大家介绍的非常详细,需要的朋友可以参考下

    MacroExecutor使用手册.xdf

    Macro Executor程式设计简介手册,介绍了软件的基本使用及安装过程,有简单的例子可供参考,只是大体介绍

    Redis 中spark参数executor-cores引起的异常解决办法

    主要介绍了Redis 中spark参数executor-cores引起的异常解决办法的相关资料,需要的朋友可以参考下

    Mybatis原始执行方式Executor代码实例解析

    在本文中,我们将详细介绍Mybatis原始执行方式Executor代码实例解析,包括Executor的分类和使用示例。 Executor分类 ---------- Mybatis提供了四种类型的Executor,每种类型都有其特点和应用场景。 ### 1. ...

    SQL File Executor-开源

    今天我们要介绍的是"SQL File Executor",一个开源的、专为执行SQL语句文件设计的小巧应用。这个工具以其简洁的界面和实用的功能,为自动化数据库创建和初始表内容加载提供了便利。 SQL File Executor的主要功能...

    大数据技术之Spark优化

    本文将详细介绍 Spark 优化技术的相关知识点。 资源配置 在 Spark 中,资源配置是性能调优的第一步。为任务分配更多的资源,可以提高 Spark 应用的性能。在 Spark 中,可以配置的资源包括 Executor 的数量、Driver...

    java中Executor,ExecutorService,ThreadPoolExecutor详解

    主要介绍了java中Executor,ExecutorService,ThreadPoolExecutor详解的相关资料,需要的朋友可以参考下

    0438-如何指定Spark1作业中Driver和Executor使用指定范围内端口

    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原...在前面Fayson介绍了《如何指定Spark2作业中Driver和Executor使用指定范围内端口》,本篇文章Fayson主要介绍如何指定Spark

    ThreadPoolExecutor的使用和Android常见的4种线程池使用介绍

    ThreadPoolExecutor的使用和Android常见的4种线程池使用介绍

    Spark原理及源码剖析1

    本文将深入探讨Spark的原理及源码分析,首先从Spark运行时的通用流程入手,然后介绍核心组件的角色与职责,以及Spark支持的不同集群部署模式。 在Spark的运行流程中,用户通过`spark-submit`提交应用程序。这个过程...

    spark调优介绍

    以下将详细介绍这些调优策略。 一、Spark开发代码调优 1. 减少行动操作:Spark的工作模式基于懒惰执行,只有遇到行动操作(如collect、save)时才会触发计算。因此,尽量减少不必要的行动操作,避免频繁触发计算,...

Global site tag (gtag.js) - Google Analytics