- 浏览: 1091716 次
文章分类
- 全部博客 (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 978场景:将文件夹所有的文件合并到指定的文件夹下 另外:如果想效 ... -
多线程-线程池的四种创建方式
2020-04-01 18:38 412多线程-线程池的四种创建方式 https://blog.cs ... -
Java基础之:nio
2019-11-13 15:38 416一、理论讲解: 史上最强Java NIO入门:担心从入门到放弃 ... -
Java 分布式之:RPC 基本概念
2019-11-13 15:07 402转载: https://www.jianshu.com/p/ ... -
Java之 volatile 关键字原理详解
2019-11-07 15:36 445一、什么是 volatile ? ... -
POI实现excell批注背景图片(仿html浮窗显示图片)
2019-10-21 08:17 603POI实现excell批注背景图片(仿html浮窗显示图片) ... -
Java之设计模式之 Observer 观察者
2019-07-04 17:21 974观察者设计模式 Java 已经实现了该模式,并且提供了使用类 ... -
HashMap, LinkedHashMap and TreeMap
2019-03-01 11:04 628https://stackoverflow.com/a/177 ... -
Java lib 操作 excel 插入图片
2019-01-19 12:46 839https://poi.apache.org/componen ... -
数据库连接池C3P0
2018-05-29 16:50 813一、名字的由来 很多 ... -
Java8之集合(Collection)遍历 forEach()、stream()
2018-05-29 14:39 20662package java8.collections; ... -
Junit Vs main on "java.util.concurrent.Executors"
2017-11-10 16:44 734Same code with different result ... -
Java之大数据学习路线
2017-11-03 10:08 5673三个月大数据研发学习 ... -
Java中创建对象的5种方式
2017-10-26 14:21 806一、Java之5种创建对象的方式 ————————————— ... -
Log4j和Slf4j的比较
2017-06-23 12:41 1364一直搞不清 Log4j 和 SLF4j 的关系。今天才若有所 ... -
Java之Java7新特性之try资源句式
2017-04-20 14:58 5341Java之Java7新特性之try资源句式 一、【try资源 ... -
Java之 java.util.concurrent 包之ExecutorService之submit () 之 Future
2017-03-04 21:27 3773一、如何使用 ExecutorService.submit() ... -
Java之 java.util.concurrent 包之Executor与ExecutorService
2017-03-04 21:18 2645一、问题: execute() 与 submit() 的区别? ... -
JAVAEE之单用户登录
2017-02-05 11:55 1032单用户登录是系统中数据一直性的解决方案之一。 问题背景: 试 ... -
Java之多线程之线程池之线程重复使用
2017-02-04 13:33 5523一、问题背景 在使用多线程时,如果要开启一个任务,则就需要新 ...
相关推荐
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。今天我们...
主要介绍了Java多线程Callable和Future接口区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
http://blog.csdn.net/yangzhaomuma/article/details/51722779
java 多线程编程 很实用 来自网上 1)包括新api介绍 2)新线程接口 Callable 和 Future 的讲解 3)线程同步知识
1. 什么是线程? 2. 什么是线程安全和线程不安全? 3. 什么是⾃旋锁? 4. 什么是CAS? 5. 什么是乐观锁和悲观锁? 6. 什么是AQS?...在Java Concurrency API中有哪些原⼦类(atomic classes)...10. 什么是Callable和Future?
主要介绍了Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
课程内容: 1- Java 多线程:启动线程 2- Java 多线程:Volatile – 基本线程通信 ...13- Java 多线程:Callable 和 Future 14- Java 多线程:中断线程 15- Java 多线程:Swing 中的多线程与 SwingWorker
2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...
自留demo,主要是Thread-Callable-Future的基本实现。 参考文章: 1、深入理解Callable ...2、彻底理解Java的Future模式: https://www.cnblogs.com/cz123/p/7693064.html
文章目录一、多线程的生命周期及五种基本状态二、Java多线程的创建及启动1.继承Thread类,重写该类的run()方法2.通过实现Runnable接口创建线程类3.通过Callable和Future接口创建线程三、Java内存模型概念四、内存间...
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口.(其实准确来讲,应该有三种,还有一种是实现Callable接口,并与Future、线程池结合使用,此文这里不讲这个。
解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...
文章目录1、进程与线程2、创建多线程2.1、继承Thread类2.2、实现Runnable接口2.3、使用匿名内部类实现2.4、实现Runnable接口的好处2.5、使用Callable和Future创建线程3、线程的生命周期4、几种特殊线程4.1、join线程...
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
文章目录神标题引入线程和进程多线程的优势线程创建方式继承Thread类来创建和启动实现Runnable接口重写run方法创建线程类使用 Callable 和 Future 创建线程三种创建线程方式做出对比线程生命周期线程控制join线程...
1.Java中的泛型方法和通配符(wildcards) 2.Java中的集合框架(Collections类和数据结构) 3.Java中的自动装箱和拆箱(Autoboxing and Unboxing) 4.Java中的注解处理器...14.Java中的多线程编程(Multi-threading)
并行与并发:那么JAVA多线程实现方式:(1)继承Thread类实现多线程:(2)实现Runnable接口方式实现多线程:(3)实现callable方式:(比实现Runnable方式强大)(4)使用ExecutorService、Future(线程池):实现有返回...