- 浏览: 1110878 次
文章分类
- 全部博客 (379)
- S2SH (16)
- stuts2 (0)
- java语言 (81)
- JSP (17)
- <html>元素 (11)
- javaweb (4)
- web容器 (3)
- ext (23)
- javaScript (48)
- ant (1)
- liferay (1)
- sql (9)
- css (42)
- 浏览器设置 (3)
- office_world (1)
- eclipse (4)
- 其它 (28)
- 操作系统 (5)
- android (6)
- Struts2 (11)
- RegEx (3)
- mysql (5)
- BigDATA (1)
- Node.js (1)
- Algorithm (10)
- Apache Spark (1)
- 数据库 (5)
- linux (2)
- git (1)
- Adobe (3)
- java语言,WebSocket (1)
- Maven (3)
- SHELL (1)
- XML (2)
- 数学 (2)
- Python (2)
- Java_mysql (1)
- ReactJS (6)
- 养生 (4)
- Docker (1)
- Protocols (3)
- java8 (2)
- 书籍 (1)
- Gradle (2)
- AngularJS (5)
- SpringMVC (2)
- SOAP (1)
- BootstrapCSS (1)
- HTTP协议 (1)
- OAuth2 (1)
最新评论
-
Lixh1986:
Java并发编程:自己动手写一把可重入锁https://blo ...
Java之多线程之Lock与Condition -
Lixh1986:
http://win.51apps.com.cn/https: ...
temp -
ztwsl:
不错,支持很好
HttpServletRequest和ServletRequest的区别 -
guodongkai:
谢谢您能将知识精华汇编总结,让初学者们从原理中学会和提高。
javaScript之function定义 -
kangwen23:
谢谢了,顶顶
struts2中的ValueStack学习
Java之多线程之Callable与Future
从 Java 5 开始出现了 java.util.concurrent 包,该包在多线程环境中应用广泛。
一、 java.util.concurrent.Callable
Callable 接口 与 Runnable 接口类似,不同的是它们的唯一的 run 方法:
1、Callable 有返回值,Runnable 没有。
Callable 的 run() 方法使用了 泛型类,可以返回任意类型的值。
2、Callable 抛出异常 ,Runnable 没有抛出。
同时 java.util.concurrent.Executors 提供了许多方法,可以操控 Callable 在线程池中运行。
二、java.util.concurrent.Future
Executors 执行 Callable 时会返回一个 Future 对象。使用 Future 我们可以得知 Callable 的运行状态,
以及获取 Callable 执行完后的返回值。
Future 的方法介绍:
- get() :阻塞式,用于获取 Callable/Runnable 执行完后的返回值。
带时间参数的get()重载方法用于最多等待的时间后,如仍未返回则线程将继续执行。
- cancel() :撤销正在执行 Callable 的 Task。
- isDone():是否执行完毕。
- isCancelled():任务是否已经被取消。
三、使用实例
100个任务各耗时 1 秒,用 10 个线程并行执行。
结果:
java.util.concurrent包之Execuotor系列文章
00_Java之 java.util.concurrent 包之概述
01_Java之java.util.concurrent包之Executor与ExecutorService
02_Java之 java.util.concurrent 包之ExecutorService之submit () 之 Future
03_Java之多线程之Callable与Future
04_Java之多线程之Lock
-
转载请注明,
原文出处:http://lixh1986.iteye.com/blog/2351367
引用:
http://www.journaldev.com/1090/java-callable-future-example
-
从 Java 5 开始出现了 java.util.concurrent 包,该包在多线程环境中应用广泛。
一、 java.util.concurrent.Callable
Callable 接口 与 Runnable 接口类似,不同的是它们的唯一的 run 方法:
1、Callable 有返回值,Runnable 没有。
Callable 的 run() 方法使用了 泛型类,可以返回任意类型的值。
2、Callable 抛出异常 ,Runnable 没有抛出。
同时 java.util.concurrent.Executors 提供了许多方法,可以操控 Callable 在线程池中运行。
二、java.util.concurrent.Future
Executors 执行 Callable 时会返回一个 Future 对象。使用 Future 我们可以得知 Callable 的运行状态,
以及获取 Callable 执行完后的返回值。
Future 的方法介绍:
- get() :阻塞式,用于获取 Callable/Runnable 执行完后的返回值。
带时间参数的get()重载方法用于最多等待的时间后,如仍未返回则线程将继续执行。
- cancel() :撤销正在执行 Callable 的 Task。
- isDone():是否执行完毕。
- isCancelled():任务是否已经被取消。
三、使用实例
100个任务各耗时 1 秒,用 10 个线程并行执行。
import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.junit.Test; public class T03_MyCallable implements Callable<String> { @Override public String call() throws Exception { Thread.sleep(1000); return Thread.currentThread().getName(); } @Test public void testName() throws Exception { ExecutorService executor = Executors.newFixedThreadPool(10); List<Future<String>> callableList = new ArrayList<Future<String>>(); Callable<String> callable = new T03_MyCallable(); for(int i=0; i< 100; i++){ Future<String> future = executor.submit(callable); callableList.add(future); } for(Future<String> future : callableList){ try { System.out.println(new Date()+ "::"+future.get());//blocked. } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } //shut down the executor service now executor.shutdown(); } /** NOTE: main thread should not complete earlier than sub thread, should at least wait for one task execution time in main thread, should use : future.get() method in main thread. or use: executor.awaitTermination(timeout, unit) in main thread. */ }
结果:
Sun Jan 08 22:01:55 CST 2017::pool-1-thread-1 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-2 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-3 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-4 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-5 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-6 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-7 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-8 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-9 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-10 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-1 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-3 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-5 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-7 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-9 ... ... ... Sun Jan 08 22:01:55 CST 2017::pool-1-thread-2 Sun Jan 08 22:01:55 CST 2017::pool-1-thread-4 Sun Jan 08 22:01:56 CST 2017::pool-1-thread-8
java.util.concurrent包之Execuotor系列文章
00_Java之 java.util.concurrent 包之概述
01_Java之java.util.concurrent包之Executor与ExecutorService
02_Java之 java.util.concurrent 包之ExecutorService之submit () 之 Future
03_Java之多线程之Callable与Future
04_Java之多线程之Lock
-
转载请注明,
原文出处:http://lixh1986.iteye.com/blog/2351367
引用:
http://www.journaldev.com/1090/java-callable-future-example
-
发表评论
-
java 将文件夹所有的文件合并到指定的文件夹下
2020-06-30 19:17 1054场景:将文件夹所有的文件合并到指定的文件夹下 另外:如果想效 ... -
多线程-线程池的四种创建方式
2020-04-01 18:38 481多线程-线程池的四种创建方式 https://blog.cs ... -
Java基础之:nio
2019-11-13 15:38 477一、理论讲解: 史上最强Java NIO入门:担心从入门到放弃 ... -
Java 分布式之:RPC 基本概念
2019-11-13 15:07 454转载: https://www.jianshu.com/p/ ... -
Java之 volatile 关键字原理详解
2019-11-07 15:36 543一、什么是 volatile ? ... -
POI实现excell批注背景图片(仿html浮窗显示图片)
2019-10-21 08:17 680POI实现excell批注背景图片(仿html浮窗显示图片) ... -
Java之设计模式之 Observer 观察者
2019-07-04 17:21 1063观察者设计模式 Java 已经实现了该模式,并且提供了使用类 ... -
HashMap, LinkedHashMap and TreeMap
2019-03-01 11:04 673https://stackoverflow.com/a/177 ... -
Java lib 操作 excel 插入图片
2019-01-19 12:46 878https://poi.apache.org/componen ... -
数据库连接池C3P0
2018-05-29 16:50 890一、名字的由来 很多 ... -
Java8之集合(Collection)遍历 forEach()、stream()
2018-05-29 14:39 20744package java8.collections; ... -
Junit Vs main on "java.util.concurrent.Executors"
2017-11-10 16:44 807Same code with different result ... -
Java之大数据学习路线
2017-11-03 10:08 5720三个月大数据研发学习 ... -
Java中创建对象的5种方式
2017-10-26 14:21 839一、Java之5种创建对象的方式 ————————————— ... -
Log4j和Slf4j的比较
2017-06-23 12:41 1406一直搞不清 Log4j 和 SLF4j 的关系。今天才若有所 ... -
Java之Java7新特性之try资源句式
2017-04-20 14:58 5383Java之Java7新特性之try资源句式 一、【try资源 ... -
Java之 java.util.concurrent 包之ExecutorService之submit () 之 Future
2017-03-04 21:27 3834一、如何使用 ExecutorService.submit() ... -
Java之 java.util.concurrent 包之Executor与ExecutorService
2017-03-04 21:18 2702一、问题: execute() 与 submit() 的区别? ... -
JAVAEE之单用户登录
2017-02-05 11:55 1058单用户登录是系统中数据一直性的解决方案之一。 问题背景: 试 ... -
Java之多线程之线程池之线程重复使用
2017-02-04 13:33 5565一、问题背景 在使用多线程时,如果要开启一个任务,则就需要新 ...
相关推荐
Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...
### Java Callable与多线程详解 在Java编程中,`Callable`接口是...通过以上分析和示例,我们可以看到`Callable`和`Future`在Java多线程编程中的强大功能,尤其是在需要处理复杂的异步任务和需要返回结果的情况下。
1. `Runnable`: 这是Java中最基础的多线程接口,只需实现`run()`方法,然后通过`Thread`对象启动新线程来执行这个任务。例如: ```java Runnable task = new Runnable() { @Override public void run() { // ...
"Java多线程Callable和Future接口区别" Java多线程Callable和Future接口是Java语言中两个非常重要的接口,它们都是Java多线程编程中使用的接口,用于描述异步计算的结果。在JavaSE5中引入的Callable是一个具有类型...
然而,为了更好地管理和控制线程,Java并发包提供了如`ExecutorService`、`Future`、`Callable`等高级接口和类,它们简化了多线程编程,并提供了更好的资源管理。 在处理数据库数据时,我们通常会使用JDBC(Java ...
在Java编程语言中,实现多线程文件传输是一种优化程序性能、提高系统资源...在提供的`java多线程文件传输`压缩包中,可能包含了实现这些概念的示例代码,通过分析和学习,可以更好地理解多线程文件传输的原理和实践。
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...
《汪文君JAVA多线程编程实战》是一本专注于Java多线程编程的实战教程,由知名讲师汪文君倾力打造。这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是...
Java中的Runnable、Callable、Future和FutureTask是Java多线程编程中的核心概念,它们各自扮演着不同的角色,共同协作以实现并发任务的管理和执行。 1. **Runnable**: Runnable是最基本的多线程接口,它只有一个`...
在Java编程语言中,多线程是核心特性之一,它使得程序可以同时执行多个不同的任务,从而提高了系统资源的利用率和程序的...在解决这些练习题的过程中,记得结合理论知识和实践操作,不断巩固和提高你的Java多线程技能。
使用`ExecutorService`和`Future`,我们可以方便地并行执行多个带有返回值的任务,而且不需要手动管理线程。这种模式在处理大量并发任务或进行分布式计算时尤其有用,因为它允许我们高效地利用系统资源,同时保持...
在Java编程语言中,Callable接口是用于创建能够返回结果并可能抛出异常的线程的。与Runnable接口相比,Callable接口提供了更强大的功能,因为Runnable只能定义无返回值的任务,而Callable可以定义有返回值的任务。这...
Java多线程编程中,`Future` 和 `Callable` 是两个关键组件,它们共同提供了有返回值的多线程解决方案。通常,我们可以通过继承 `Thread` 类或实现 `Runnable` 接口创建线程,但这些方法无法直接返回计算结果。而 `...
Java多线程是Java编程中的重要概念,尤其在开发高性能、高并发的应用中不可或缺。本示例旨在为初学者提供一个全面理解Java多线程的起点。通过学习这个实例,你可以掌握如何创建和管理线程,理解线程同步与通信的重要...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,我们可以通过实现Runnable接口或继承Thread类来创建线程。然而,直接使用线程可能存在一些问题,如资源管理...
Java多线程学习是编程领域中的重要一环,特别是在服务器端和网络编程中,多线程技术能够有效地利用系统资源,提高程序的并发性。FTP(File Transfer Protocol)上传则是通过网络将本地文件传输到远程服务器的过程。...
Java多线程则是为了解决这个问题而引入的概念。通过创建多个线程,程序可以在同一时间执行多个任务,提高了CPU的利用率和程序的响应速度。多线程可以分为并发和并行两种。并发是在单核CPU中,通过快速切换线程执行来...
通过以上知识点,我们可以看到Callable接口在Java多线程中的应用,它可以方便地处理返回值,并且与ExecutorService结合,提供了强大的并发处理能力。在实际开发中,特别是在大数据处理、计算密集型任务等场景下,...
Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。在Java中,多线程主要通过两种方式实现:继承Thread类和实现Runnable接口。这份"JAVA多线程的PPT和示例...