Callable接口:
返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。
Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。
ExecutorService接口方法:
<T> Future<T> submit(Callable<T> task)
提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。
如果想立即阻塞任务的等待,则可以使用 result = exec.submit(aCallable).get(); 形式的构造。
注:Executors类包括了一组方法,可以转换某些其他常见的类似于闭包的对象,例如,将 PrivilegedAction 转换为 Callable 形式,这样就可以提交它们了。
实例:
package com.bijian.thread;
import java.util.concurrent.Callable;
public class MyCallable implements Callable {
private String oid;
MyCallable(String oid) {
this.oid = oid;
}
@Override
public Object call() throws Exception {
return oid + "任务返回的内容";
}
}
package com.bijian.thread;
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;
public class Main {
/**
* @param args
*/
public static void main(String[] args) throws ExecutionException,
InterruptedException {
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
// 创建两个有返回值的任务
Callable c1 = new MyCallable("A");
Callable c2 = new MyCallable("B");
// 执行任务并获取Future 对象
Future f1 = pool.submit(c1);
Future f2 = pool.submit(c2);
// 从Future 对象上获取任务的返回值,并输出到控制台
System.out.println(">>>" + f1.get().toString());
System.out.println(">>>" + f2.get().toString());
// 关闭线程池
pool.shutdown();
}
}
运行结果:
>>>A任务返回的内容
>>>B任务返回的内容
分享到:
相关推荐
在Java Development Kit (JDK)从1.5到1.7的发展历程中,引入了许多显著的新特性,这些特性极大地丰富了Java语言的功能性、可读性和编程效率。下面,我们将详细探讨这些版本中的主要新增功能。 ### JDK 1.5(代号:...
今天,JDK1.5終於內建泛型特性,不僅編譯器不再需要 任何外力(外掛附件)的幫助,整個 Java標準程式庫也被翻新(retrofit),許多 角落針對泛型做了改寫。 讓我們把帶有「參數化型別」(parameterized types)的 ...
#### JDK1.5 新特性 JDK1.5,也称为Java 5,是Java发展史上的一个重要里程碑,引入了许多新特性,极大地提高了开发效率和代码质量。这些新特性包括: 1. **泛型** - 泛型是一种在编译时检查类型安全,并且所有的...
#### JDK 1.5 版本的新特性 ##### 自动装箱与拆箱 自 JDK 1.5 起,Java 引入了一个非常方便的功能——自动装箱与拆箱。这使得在基本数据类型与它们对应的包装类之间进行转换变得更加容易。 - **自动装箱**:将...
本资源摘要信息中,我们将对 Java 相关试题、笔试题和面试题进行总结和分析,涵盖了 XML 解析技术、Struts 框架、ArrayList 和 Vector 的区别、HashMap 和 Hashtable 的区别、JDK 1.5 和 1.6 新特性、Hibernate 工作...
在本文中,我们将深入探讨KafkaProducer在Java环境下的实现,特别是在SpringBoot 1.5版本中,使用JDK 1.8和Kafka 0.10.0.0版本。此外,我们还将提及如何结合Swagger2来实现API的身份口令认证。 首先,让我们了解...
比较简单的JSONBuilder:(.net 2.0, jdk1.5) - 只有两个文件:JSONBuilder(.cs,.java) , JSONBuilderDelegates(.cs,.java) - 不用考虑对象嵌套输出格式的匹配问题 - 自动字符串转义 - 支持常见数据类型、以及常用的...
`json-lib`库支持多种版本的JDK,这里的`-jdk15.jar`版本意味着它是为JDK1.5编译的,确保了与较旧版本JVM的兼容性。这个库对于Struts2 JSON插件来说是重要的依赖,因为它负责实际的JSON序列化和反序列化工作。 在...
Java中的枚举(enum)是自JDK 1.5版本引入的一种强大的类型,它用于定义一组相关的常量。枚举在Java中被设计为一种特殊的类,它们默认继承自`java.lang.Enum`抽象类,并且是单继承的,这意味着它们无法再继承其他类...
服务器端自定义对象对应方法(dwrtest)编写(采用JDK 1.5编写,如JDK1.4请将泛型去掉): public String dwrtest(String a, String b, List<String> s,Map,String>map) { StringBuilder strbui = new ...
1. 使用`JdbcTemplate`或`SimpleJdbcTemplate`(如果在JDK1.5环境下)来简化操作。 2. 对于无返回值的存储过程,直接使用`execute`方法执行存储过程。 3. 对于有返回值的存储过程,可以创建`CallableStatement`并...
1. Java Development Kit (JDK):Spring 3.0支持JDK 1.5及以上版本。 2. Apache Maven或Gradle:构建工具用于管理依赖。 3. IDE:如Eclipse、IntelliJ IDEA等,它们都有内置的Spring支持。 二、项目结构 创建一个...
2. 配置项目为使用JDK 1.5或更高版本。 **导入Struts2核心库** Struts2需要一系列的核心库才能正常运行。这些库包括但不限于以下: - `struts2-core.jar` - `xwork-core.jar` - `ognl.jar` - `freemarker.jar` - `...
泛型机制是Java语言中的一种重要特性,自JDK 1.5开始引入,提供了编译时类型安全检测机制,允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值...
开发环境中,我们需要 MyEclipse 4.1、Eclipse 3.12、JDK 1.5 和 Tomcat 5.5。首先,新建一个 Web 项目。通过 `File` -> `New` -> `Project`,选择 MyEclipse 下的 `Web Project`,项目名为 `mySpring1`,其余选项...
Java 枚举类型 enum 是 Java 语言中的一种特殊的数据类型,自从 JDK 1.5 引入枚举类型以来,它已经成为了 Java 程序员中的一种常用工具。本文将对 Java 枚举类型 enum 进行详解,并介绍其使用方法。 一、枚举类型的...
这种特性自 JDK 1.5 起被引入。 #### 装箱 - **定义**: 将基本数据类型值转换为对应的包装类对象。 - **示例**: ```java Integer num1 = 3; // 将 int 类型的 3 装箱为 Integer 对象 ``` #### 拆箱 - **定义**:...