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任务返回的内容
相关推荐
#### JDK 1.5 版本的新特性 ##### 自动装箱与拆箱 自 JDK 1.5 起,Java 引入了一个非常方便的功能——自动装箱与拆箱。这使得在基本数据类型与它们对应的包装类之间进行转换变得更加容易。 - **自动装箱**:将...
在本文中,我们将深入探讨KafkaProducer在Java环境下的实现,特别是在SpringBoot 1.5版本中,使用JDK 1.8和Kafka 0.10.0.0版本。此外,我们还将提及如何结合Swagger2来实现API的身份口令认证。 首先,让我们了解...
System.out.println("Value is null"); } ``` #### 7. Streams Stream API 提供了一种新的数据处理方式,支持流式数据处理,可以极大提高代码的可读性和效率。 - **示例**: ```java List<String> list = ...
- 枚举提供了内置的方法如 `values()` 和 `valueOf()`,可以方便地获取所有枚举值或通过名称获取枚举值。 - 可以定义枚举方法,实现更复杂的功能。 #### 四、泛型(Generics) 泛型提供了一种类型安全的方法来指定...
本文将详细解析JDK 5中的新特性,并通过具体实例来帮助读者更好地理解和应用这些特性。 #### 二、新特性解析 ##### 1. 泛型 (Generics) 泛型是一种在编译时确保类型安全的技术,它允许开发者创建高度可重用的类或...
通过配置,我们可以定制其行为,例如设置Key、Value和Hash的操作策略,以及选择不同的序列化方法。在我们的案例中,我们将使用RedisTemplate来处理数据的存取。 **连接池配置** 在高并发场景下,为了提高性能和资源...
`和`int value = map[key];` 2. **自动资源管理**: - 使用`try-with-resources`语句,可以自动关闭实现了`AutoCloseable`接口的资源,如`BufferedReader`。这减少了手动关闭资源可能导致的资源泄漏问题。例如: ...
return br.readLine(); } ``` 3、泛型实例创建过程中的类型引用简化 现在可以省略泛型类型的实例化过程,如下所示: ```java Map, String> hello = new HashMap(); Map, String> hello = new HashMap, String>(); `...
return value; } } ``` 在这个例子中,`@NonNull`注解表示泛型类型`T`的实例不应为null,这在编译时就能检测到可能的空指针异常。 通过学习枚举类、注解和类型注解,开发者能够编写出更加优雅、可维护的Java代码...
return value; } public void setKey(K key) { this.key = key; } public void setValue(V value) { this.value = value; } } ``` 此示例展示了如何定义一个带有两个类型参数`K`和`V`的泛型类`Notepad`,...
首先,我们需要安装必要的开发工具,如Eclipse或IntelliJ IDEA,并配置好Java Development Kit (JDK)。接着,我们需要在项目中引入Struts框架的依赖。通常,这可以通过Maven或Gradle完成,添加相应的依赖库到项目的...
JavaBean允许开发者通过Java虚拟机(JVM)执行,至少需要JDK1.1或更高版本才能运行。尽管最初JavaBean主要用于可视化领域,如AWT下的应用,但在JSP出现后,它们更多地被应用于非可视化场景,特别是在服务器端,用于...
- **创建TreeSet实例:**使用`new TreeSet()`创建一个空的`TreeSet`实例。 - **代码片段不完整:**从给出的代码片段来看,后面的部分被截断了,无法完整展示问题。但是可以看出这里涉及到了`TreeSet`的使用和可能的...
jsp和javabean的实例 jsp和javabean是当今非常流行的动态网站开发技术,jsp作为一个很好的动态网站开发语言,已经得到了越来越广泛的应用。在jsp应用程序中,jsp+javabean的组合已经成为了事实上最常见的jsp程序的...
1. Java Development Kit (JDK):Struts是基于Java的,所以需要安装JDK。 2. Apache Tomcat:一个流行的Java Web服务器,用于运行Struts应用。 3. Eclipse或IntelliJ IDEA:主流的Java开发IDE,有助于编写和调试代码...
首先,你需要安装Java Development Kit (JDK) 和一个集成开发环境(IDE),如Eclipse或NetBeans。然后,添加JSF库到你的项目中,通常通过Maven或Gradle依赖管理工具完成。最后,配置Web.xml文件以启用JSF。 **三、...
本实例将基于JDK 1.7和Maven的阿里镜像来创建一个简单的Spring Security应用,以演示其基本功能。 ### 1. 安装与配置 首先,确保你的开发环境已经安装了JDK 1.7,并配置了Maven。由于国内网络原因,推荐将Maven的...
在上面的例子中,`Converter`接口是一个函数式接口,它的`convert`方法可以由Lambda表达式`(from) -> Integer.valueOf(from)`提供实现。这样,Lambda表达式就可以作为`Converter`接口的实例使用。 总结,Java 8的...