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

ExecutorService使用概述

    博客分类:
  • Java
 
阅读更多

背景:

java 并发中concurrent包下有很多关于并发的操作,使用最常见的为ExecutorService

支持类型:

Callable

Runnable

此两种类型中的Callable是有返回值的,那么如果很好的获取执行结果?

 

依赖:

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
	<version>3.0</version>
</dependency>
<dependency>
	<groupId>commons-lang</groupId>
	<artifactId>commons-lang</artifactId>
	<version>2.6</version>
</dependency>

 

实现:

public static void getResult() throws Exception {
	long begin = System.currentTimeMillis();
	ExecutorService service = Executors.newFixedThreadPool(10000);
	List<StringCallable> all = new ArrayList<StringCallable>();
	for (int i = 0; i < 1000; i++) {
		all.add(new StringCallable(i));
	}
	List<Future<String>> result = service.invokeAll(all);

	for (Future<String> future : result) {
		String list = future.get();
		System.out.println(list);
	}
	service.shutdown();
	long end = System.currentTimeMillis();
	System.out.println("--" + (end - begin));
}

 

直接获取:

public static void get() throws Exception {
	long begin = System.currentTimeMillis();
	ExecutorService service = Executors.newFixedThreadPool(10000);
	for (int i = 0; i < 1000; i++) {
		Future<String> resul = service.submit(new StringCallable(1000));
		System.out.println(resul.get());
	}
	service.shutdown();
	long end = System.currentTimeMillis();
	System.out.println("cost:" + (end - begin));
}

后者会有等待而不是并发,因此在使用的时候需要注意

基类:

class StringCallable implements Callable<String> {
	private int index = 0;

	public StringCallable(int index) {
		super();
		this.index = index;
	}

	public String call() throws Exception {
		System.out.println("index:" + index);
		return RandomStringUtils.random(12, "abcdefghijklmnopqrstuvwxyz");
	}
}

 

0
5
分享到:
评论

相关推荐

    Java多线程基础-01、数组概述.rar

    总的来说,"Java多线程基础-01、数组概述"的学习将帮助你理解如何在Java中创建和管理线程,以及如何在多线程环境下安全地使用数组。通过深入学习这部分内容,你将具备编写高效并发程序的基础,为后续的多线程编程...

    java并发编程基础PPT以及DEMO示例&操作系统概述PPT

    1. **线程创建**:如何使用`Thread`类或实现`Runnable`接口创建线程。 2. **线程同步**:包括`synchronized`关键字、`wait()`, `notify()` 和 `notifyAll()` 方法,以及`Lock`接口和相关的实现,如`ReentrantLock`。...

    《阿里巴巴Java开发手册》(v1.1.0版)

    - 使用`ExecutorService`管理线程池。 **7. 控制语句** - **规则概述:** - 对条件判断、循环等控制语句的使用规定。 - **正例:** - 使用`if-else`或`switch-case`等语句结构清晰地表达逻辑。 - 避免过多的...

    java 线程池管理类:Executors_.docx

    - 与`newFixedThreadPool(1)`不同,`newSingleThreadExecutor()`返回的`ExecutorService`不能重新配置以使用更多线程。 - 在析构函数`finalize()`中会调用`shutdown()`,即使未显式调用`shutdown()`也会确保线程池...

    Java程序设计实验报告2(弹球游戏)[1]1.pdf

    2. 掌握多线程编程的基本原理,能够使用 Runnable 和 ExecutorService 等接口进行线程的创建、启动等工作。 3. 培养独立查找资料、解决问题的能力。 二、实验任务 1. 设计并实现弹球游戏:用户可以通过 GUI 组件...

    JAVA调用外接设备(制卡机)-文档概述

    6. **多线程编程**:在实际应用中,可能需要同时处理多个制卡任务,这就需要使用Java的多线程技术,如Thread、Runnable、ExecutorService等,确保程序的并发性能和响应速度。 7. **异常处理**:与硬件设备交互时,...

    使用Java并发编程实现一个简单的银行账户管理系统.txt

    通过使用`ConcurrentHashMap`和`ExecutorService`等工具,该系统能够有效地处理多线程环境下的账户操作,如转账和查询余额等。此外,本文还深入分析了程序的关键技术和实现细节,为读者提供了更全面的理解。

    Java程序基础-多线程概述.pptx

    在实际编程中,Java提供了多种创建和管理线程的方法,如直接继承`Thread`类或实现`Runnable`接口,以及使用`ExecutorService`和`Future`等高级并发工具。理解并熟练掌握多线程的概念和技术,对于编写高效的并发程序...

    阿里巴巴黄山版和嵩山版java开发手册.zip

    2. **并发工具类**:推荐使用`ConcurrentHashMap`代替`synchronized` Map,使用`ExecutorService`管理线程池,避免滥用`Thread.sleep()`。 3. **锁的使用**:理解并合理使用锁,如可重入锁、读写锁、条件变量等。 ...

    客户端与服务器端的Socket通信.pdf

    #### Socket通信概述 Socket是一种用于在网络上的不同主机间进行通信的接口,它允许应用程序发送和接收数据包。Socket通信主要基于TCP/IP协议栈,分为面向连接的TCP和无连接的UDP两种类型。 **面向连接的TCP**:此...

    使用Java异步编程实现一个简单的网络请求.txt

    #### 一、概述 本文将详细介绍一个使用Java异步编程模型实现简单网络请求的例子。通过这个示例,我们可以了解到如何利用Java中的多线程机制和异步处理技术来提高程序的响应性和效率。此示例涉及的主要概念和技术...

    JAVA高质量并发详解,多线程并发深入讲解

    深入探讨如何创建和使用`ExecutorService`,以及如何通过它管理线程生命周期。 - **第7章:Runnable与Callable的区别** 对比`Runnable`和`Callable`接口的不同之处,特别是在返回值和异常处理方面的差异。 - **第...

    android 多线程

    6. **`FutureTask`**:代表异步计算的结果,通常配合`ExecutorService`使用。 #### 三、`Handler`与`Looper`机制详解 1. **Handler机制**: - **创建**:通过创建`Handler`实例,可以发送消息或运行任务到指定...

    教你写高效的android

    学习使用ExecutorService和ThreadPoolExecutor来更有效地管理线程池。 3. **布局优化**:减少视图层次,避免过度绘制,使用merge标签减少布局嵌套,以及使用ViewStub延迟加载不常用的视图。理解并应用Android ...

    掌握并发的钥匙:Java Executor框架深度解析

    ### Executor框架概述 Executor框架提供了一种执行异步任务的方法,它允许开发者将任务提交给线程池,而无需直接管理线程的生命周期。这一框架的核心组件包括: - **Executor**:一个接口,定义了执行提交的...

    java多线程编程总结

    Java中实现多线程的方式主要包括:继承`Thread`类、实现`Runnable`接口以及使用`ExecutorService`、`Callable`、`Future`来实现有返回结果的多线程。本文将详细介绍这几种方式的具体实现与应用场景。 #### 二、继承...

    使用JavaFX并发实现多人聊天室.txt

    #### 一、项目概述 本项目旨在构建一个基于JavaFX框架的多人在线聊天室应用。该应用利用JavaFX的并发编程特性,如`ExecutorService`和`Future`等类,实现了消息的异步处理与发送功能,从而提升了用户体验并确保了...

    阿里巴巴Java开发手册(终极版)

    - 尽可能使用高阶并发工具,如`ExecutorService`、`Semaphore`等。 - 避免过度使用`synchronized`,考虑使用`Lock`和`Condition`。 - 注意线程同步和可见性问题,合理使用`volatile`关键字。 7. **设计模式**: ...

    spring 的详细使用

    **Spring 框架概述** Spring 是一个开源的 Java 应用框架,它以其轻量级、模块化和全面的企业级应用支持而闻名。Spring 的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

Global site tag (gtag.js) - Google Analytics