背景:
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"); } }
相关推荐
总的来说,"Java多线程基础-01、数组概述"的学习将帮助你理解如何在Java中创建和管理线程,以及如何在多线程环境下安全地使用数组。通过深入学习这部分内容,你将具备编写高效并发程序的基础,为后续的多线程编程...
1. **线程创建**:如何使用`Thread`类或实现`Runnable`接口创建线程。 2. **线程同步**:包括`synchronized`关键字、`wait()`, `notify()` 和 `notifyAll()` 方法,以及`Lock`接口和相关的实现,如`ReentrantLock`。...
- 使用`ExecutorService`管理线程池。 **7. 控制语句** - **规则概述:** - 对条件判断、循环等控制语句的使用规定。 - **正例:** - 使用`if-else`或`switch-case`等语句结构清晰地表达逻辑。 - 避免过多的...
- 与`newFixedThreadPool(1)`不同,`newSingleThreadExecutor()`返回的`ExecutorService`不能重新配置以使用更多线程。 - 在析构函数`finalize()`中会调用`shutdown()`,即使未显式调用`shutdown()`也会确保线程池...
2. 掌握多线程编程的基本原理,能够使用 Runnable 和 ExecutorService 等接口进行线程的创建、启动等工作。 3. 培养独立查找资料、解决问题的能力。 二、实验任务 1. 设计并实现弹球游戏:用户可以通过 GUI 组件...
6. **多线程编程**:在实际应用中,可能需要同时处理多个制卡任务,这就需要使用Java的多线程技术,如Thread、Runnable、ExecutorService等,确保程序的并发性能和响应速度。 7. **异常处理**:与硬件设备交互时,...
通过使用`ConcurrentHashMap`和`ExecutorService`等工具,该系统能够有效地处理多线程环境下的账户操作,如转账和查询余额等。此外,本文还深入分析了程序的关键技术和实现细节,为读者提供了更全面的理解。
在实际编程中,Java提供了多种创建和管理线程的方法,如直接继承`Thread`类或实现`Runnable`接口,以及使用`ExecutorService`和`Future`等高级并发工具。理解并熟练掌握多线程的概念和技术,对于编写高效的并发程序...
2. **并发工具类**:推荐使用`ConcurrentHashMap`代替`synchronized` Map,使用`ExecutorService`管理线程池,避免滥用`Thread.sleep()`。 3. **锁的使用**:理解并合理使用锁,如可重入锁、读写锁、条件变量等。 ...
#### Socket通信概述 Socket是一种用于在网络上的不同主机间进行通信的接口,它允许应用程序发送和接收数据包。Socket通信主要基于TCP/IP协议栈,分为面向连接的TCP和无连接的UDP两种类型。 **面向连接的TCP**:此...
#### 一、概述 本文将详细介绍一个使用Java异步编程模型实现简单网络请求的例子。通过这个示例,我们可以了解到如何利用Java中的多线程机制和异步处理技术来提高程序的响应性和效率。此示例涉及的主要概念和技术...
深入探讨如何创建和使用`ExecutorService`,以及如何通过它管理线程生命周期。 - **第7章:Runnable与Callable的区别** 对比`Runnable`和`Callable`接口的不同之处,特别是在返回值和异常处理方面的差异。 - **第...
6. **`FutureTask`**:代表异步计算的结果,通常配合`ExecutorService`使用。 #### 三、`Handler`与`Looper`机制详解 1. **Handler机制**: - **创建**:通过创建`Handler`实例,可以发送消息或运行任务到指定...
学习使用ExecutorService和ThreadPoolExecutor来更有效地管理线程池。 3. **布局优化**:减少视图层次,避免过度绘制,使用merge标签减少布局嵌套,以及使用ViewStub延迟加载不常用的视图。理解并应用Android ...
### Executor框架概述 Executor框架提供了一种执行异步任务的方法,它允许开发者将任务提交给线程池,而无需直接管理线程的生命周期。这一框架的核心组件包括: - **Executor**:一个接口,定义了执行提交的...
Java中实现多线程的方式主要包括:继承`Thread`类、实现`Runnable`接口以及使用`ExecutorService`、`Callable`、`Future`来实现有返回结果的多线程。本文将详细介绍这几种方式的具体实现与应用场景。 #### 二、继承...
#### 一、项目概述 本项目旨在构建一个基于JavaFX框架的多人在线聊天室应用。该应用利用JavaFX的并发编程特性,如`ExecutorService`和`Future`等类,实现了消息的异步处理与发送功能,从而提升了用户体验并确保了...
- 尽可能使用高阶并发工具,如`ExecutorService`、`Semaphore`等。 - 避免过度使用`synchronized`,考虑使用`Lock`和`Condition`。 - 注意线程同步和可见性问题,合理使用`volatile`关键字。 7. **设计模式**: ...
**Spring 框架概述** Spring 是一个开源的 Java 应用框架,它以其轻量级、模块化和全面的企业级应用支持而闻名。Spring 的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...