`

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任务返回的内容
  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线程:新特征-障碍器 Java线程:...

    Java多线程

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

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

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

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

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

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

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

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

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

    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