在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。
现在Java终于有可返回值的任务(也可以叫做线程)了。
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。
下面是个很简单的例子:
import java.util.concurrent.*;
/**
* Java线程:有返回值的线程
*
* @author Administrator 2009-11-5 0:41:50
*/
public class Test {
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();
}
}
class MyCallable implements Callable{
private String oid;
MyCallable(String oid) {
this.oid = oid;
}
@Override
public Object call() throws Exception {
return oid+"任务返回的内容";
}
}
>>>A任务返回的内容
>>>B任务返回的内容
Process finished with exit code 0
非常的简单,要深入了解还需要看Callable和Future接口的API啊。
转http://coach.iteye.com/blog/743193
分享到:
相关推荐
Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java线程:新特征-信号量 Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征...
Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:...
#### 十三、Java线程:新特征-有返回值的线程 通过使用`Callable`接口和`FutureTask`类,Java线程可以返回结果。这种方式比传统使用`Thread`类更加灵活。 #### 十四、Java线程:新特征-锁(上) Java提供了一套...
Java是世界上最流行的编程语言之一,尤其在企业级后端开发领域有着广泛的应用。J2SE(Java 2 Standard Edition)是Java平台的核心部分,提供了构建桌面应用和服务器端应用程序的基础。面向后台,J2SE部分的学习是每...
#### 十一、Java线程:新特征 - **线程池** `ExecutorService` 和 `Executors` 提供了一种高效地管理线程的方式,减少了线程创建和销毁的开销。 - **有返回值的线程** 通过 `Callable` 接口和 `Future` 类可以...
- **Callable:** 用于创建有返回值的线程任务。 **CountDownLatch、CyclicBarrier和Semaphore的用法:** - **CountDownLatch:** 计数器,当计数器到达0时,所有等待的线程被唤醒。 - **CyclicBarrier:** 障碍,...
#### 五、Java线程的新特征详解 - **线程池**:高效地复用一组线程来执行任务,减少了创建和销毁线程的开销。 - **有返回值的线程**:通过`Callable`和`Future`实现线程的返回值,提供了更灵活的异步编程模型。 - *...
- 创建一个新的进程比创建一个新的线程消耗更多的资源和时间。 - 进程之间的通信需要通过IPC机制,而线程之间的通信可以直接访问共享数据。 **5. 上下文切换:** - 定义:当CPU从一个线程切换到另一个线程时,会...
- 使用`Callable`接口和`FutureTask`类来创建有返回值的线程。 - 使用`ExecutorService`和`Callable`/`Runnable`接口创建线程池。 ### 9. 线程阻塞 - **知识点:** - 线程可以通过调用`Thread.sleep()`、等待...
**七、Java线程的新特性** 1. **线程池**:`ExecutorService`管理线程,提高性能,避免资源浪费。 2. **有返回值的线程**:`Future`和`Callable`接口组合实现。 3. **锁**:`java.util.concurrent.locks`包提供了更...
### Java网络编程基础知识点解析 #### 一、选择题知识点详解 ...以上对给定的选择题进行了详细的解析,覆盖了 Java 编程语言的基础概念、语法特性、类库使用等多个方面,有助于深入理解 Java 的基础知识和技术要点。
#### Java线程:volatile关键字与新特征 `volatile`关键字用于保证变量的可见性和禁止指令重排序,适用于不需要复杂同步机制的情况下的简单变量读写操作。Java新特性中引入了线程池、`Future`和`Callable`接口支持...
- `String`是不可变的,每次对`String`类型的修改都会产生新的`String`对象,这在多线程环境下是安全的。 - `StringBuffer`是可变的,同时它也是线程安全的,适用于多线程环境。 - `StringBuilder`同样是可变的,...
### Java多线程问题总结 #### 一、多线程的作用与优势 1. **发挥多核CPU的优势:** - 当今计算机硬件普遍配备有多核CPU,利用多线程技术能够有效地分配任务到不同的核心上,使得计算资源得到最大化利用。在双核...
Java线程有五种状态:新建、可运行、运行、阻塞和终止。可以通过Thread类的getState()方法查看线程状态。线程的控制包括: - sleep():使当前线程进入休眠状态,指定时间后自动唤醒。 - join():让当前线程等待另一...