介绍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
看的出来,结果出现的顺序并不是我们丢给它的顺序。
分享到:
相关推荐
1、azkaban介绍、三种(solo-server、two-server和multiple-executor)部署方式及验证 网址:https://blog.csdn.net/chenwewi520feng/article/details/130728956 介绍阿兹卡班的主要功能、应用场景以及三种部署方式...
这篇文章主要介绍下并发包下的Executor接口,Executor接口虽然作为一个非常旧的接口(JDK1.5 2004年发布),但是很多程序员对于其中的一些原理还是不熟悉,因此写这篇文章来介绍下Executor接口,同时巩固下自己的...
详细介绍java并发编程相关知识: 基础知识 并发与并行 Java并发演进历史 Java并发模型 线程模型 存储模型 JVM同步原语 volatile CAS 线程安全 保护“共享数据” 低级并发工具 原子变量 锁...
这段代码介绍了如何在Java中调用操作系统中的可执行命令,产将其标准输出及错误输出保存在文件中。
主要介绍了Java中Executor接口用法,较为详细的总结了Executor接口的定义、创建及用法,需要的朋友可以参考下
主要介绍了Java并发之线程池Executor框架的深入理解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了Java Executor 框架的实例详解的相关资料,这里提供实例来帮助大家学习理解这部分内容,需要的朋友可以参考下
主要介绍了Azkaban报错-azkaban.executor.ExecutorManagerException: No active executors found,本文给大家介绍的非常详细,需要的朋友可以参考下
主要介绍了java 中Executor, ExecutorService 和 Executors 间的不同的相关资料,需要的朋友可以参考下
Macro Executor程式设计简介手册,介绍了软件的基本使用及安装过程,有简单的例子可供参考,只是大体介绍
主要介绍了Redis 中spark参数executor-cores引起的异常解决办法的相关资料,需要的朋友可以参考下
本1、2、3节介绍了Spark 内存相关之识,第4节描述了常错误类型及产原因并给出了解决案。1 堆内和堆外内存规划堆内和堆外内存规划了更为详细的分配,以充分利内
主要介绍了Java并发框架:Executor API详解,随着当今处理器中可用的核心数量的增加, 随着对实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行。 Java 提供了自己的多线程框架,称为 Executor 框架,需要的...
主要介绍了java中Executor,ExecutorService,ThreadPoolExecutor详解的相关资料,需要的朋友可以参考下
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原...在前面Fayson介绍了《如何指定Spark2作业中Driver和Executor使用指定范围内端口》,本篇文章Fayson主要介绍如何指定Spark
主要介绍了Mybatis原始执行方式Executor代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了详解Java线程池和Executor原理的分析的相关资料,这里提供实例及分析原理帮助大家理解这部分知识,需要的朋友可以参考下
mybatis中sqlsession下的四大对象是指:executor, statementHandler,parameterHandler,resultHandler对象。这篇文章主要介绍了Mybatis中SqlSession下的四大对象之执行器(executor),需要的朋友可以参考下
第1章介绍Java并发编程的挑战,会向读者说明可能会遇到哪些问题,以及如何解决。第2章Java并发编程的底层实现原理...第10章介绍了Executor框架的整体结构和成员组件。第11章介绍几个并发编程的实战与并发编程问题排查。
4、azkaban-3.51.0 通过api进行操作azkaban界面功能 网址:https://blog.csdn.net/chenwewi520feng/article/details/130749415 介绍azkaban通过其api调用其通过页面提供的功能