`
wode66
  • 浏览: 743254 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java线程:新特征-有返回值的线程

阅读更多

Java线程:新特征-有返回值的线程
 
    在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任务返回的内容 
 

补充:

(1) 关于Future对象的get()方法调用的问题。

        当线程未执行完毕时,调用Future对象的get()方法,是不是有问题啊?其实不然,jdk文档中,get()是这样解释的:如有必要,等待计算完成,然后获取其结果。即get()方法会一直等待线程结束,然后再返回值。

 

转载自:http://lavasoft.blog.51cto.com/62575/222082

 

 

 

 

分享到:
评论

相关推荐

    Java多线程编程总结

    Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java线程:新特征-信号量 Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征...

    java线程详解

    Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:...

    Java多线程编程经验

    #### 十三、Java线程:新特征-有返回值的线程 Java 5 引入了 `java.util.concurrent` 包,提供了 `Callable` 和 `Future` 接口,允许线程执行后返回结果。 #### 十四、Java线程:新特征-锁(上) Java 5 还引入了...

    Java多线程

    #### 十三、Java线程:新特征-有返回值的线程 通过使用`Callable`接口和`FutureTask`类,Java线程可以返回结果。这种方式比传统使用`Thread`类更加灵活。 #### 十四、Java线程:新特征-锁(上) Java提供了一套...

    面向后台,j2se部分都是基础,主要学习: 面向对-Java-Summary-of-Basic-Learning.zip

    Java是世界上最流行的编程语言之一,尤其在企业级后端开发领域有着广泛的应用。J2SE(Java 2 Standard Edition)是Java平台的核心部分,提供了构建桌面应用和服务器端应用程序的基础。面向后台,J2SE部分的学习是每...

    java多线程编程总结

    #### 十一、Java线程:新特征 - **线程池** `ExecutorService` 和 `Executors` 提供了一种高效地管理线程的方式,减少了线程创建和销毁的开销。 - **有返回值的线程** 通过 `Callable` 接口和 `Future` 类可以...

    图灵图书:图解JAVA多线程设计模式

    - **Callable:** 用于创建有返回值的线程任务。 **CountDownLatch、CyclicBarrier和Semaphore的用法:** - **CountDownLatch:** 计数器,当计数器到达0时,所有等待的线程被唤醒。 - **CyclicBarrier:** 障碍,...

    Java_多线程编程线程:大总结

    #### 五、Java线程的新特征详解 - **线程池**:高效地复用一组线程来执行任务,减少了创建和销毁线程的开销。 - **有返回值的线程**:通过`Callable`和`Future`实现线程的返回值,提供了更灵活的异步编程模型。 - *...

    Java并发编程面试题(2024最新版)-重点.docx

    - 创建一个新的进程比创建一个新的线程消耗更多的资源和时间。 - 进程之间的通信需要通过IPC机制,而线程之间的通信可以直接访问共享数据。 **5. 上下文切换:** - 定义:当CPU从一个线程切换到另一个线程时,会...

    CoreJava考试试题---达内科技.pdf

    - 使用`Callable`接口和`FutureTask`类来创建有返回值的线程。 - 使用`ExecutorService`和`Callable`/`Runnable`接口创建线程池。 ### 9. 线程阻塞 - **知识点:** - 线程可以通过调用`Thread.sleep()`、等待...

    JAVA多线程总结

    **七、Java线程的新特性** 1. **线程池**:`ExecutorService`管理线程,提高性能,避免资源浪费。 2. **有返回值的线程**:`Future`和`Callable`接口组合实现。 3. **锁**:`java.util.concurrent.locks`包提供了更...

    java网络编程基础习题+部分答案

    ### Java网络编程基础知识点解析 #### 一、选择题知识点详解 ...以上对给定的选择题进行了详细的解析,覆盖了 Java 编程语言的基础概念、语法特性、类库使用等多个方面,有助于深入理解 Java 的基础知识和技术要点。

    JAVA多线程

    #### Java线程:volatile关键字与新特征 `volatile`关键字用于保证变量的可见性和禁止指令重排序,适用于不需要复杂同步机制的情况下的简单变量读写操作。Java新特性中引入了线程池、`Future`和`Callable`接口支持...

    Java面试常见问题总结(2024最新版)

    - `String`是不可变的,每次对`String`类型的修改都会产生新的`String`对象,这在多线程环境下是安全的。 - `StringBuffer`是可变的,同时它也是线程安全的,适用于多线程环境。 - `StringBuilder`同样是可变的,...

    40个Java多线程问题总结

    ### Java多线程问题总结 #### 一、多线程的作用与优势 1. **发挥多核CPU的优势:** - 当今计算机硬件普遍配备有多核CPU,利用多线程技术能够有效地分配任务到不同的核心上,使得计算资源得到最大化利用。在双核...

    java线程实例 各种小Demo

    Java线程有五种状态:新建、可运行、运行、阻塞和终止。可以通过Thread类的getState()方法查看线程状态。线程的控制包括: - sleep():使当前线程进入休眠状态,指定时间后自动唤醒。 - join():让当前线程等待另一...

Global site tag (gtag.js) - Google Analytics