`

多线程中任务产生返回值

 
阅读更多

Runnable是执行工作的独立任务,但是不能返回任何值,如果希望在任务完成时候有返回值,可以实现Callable接口。

package cn.thread;

//: concurrency/CallableDemo.java
import java.util.concurrent.*;
import java.util.*;

class TaskWithResult implements Callable<String> {
private int id;
public TaskWithResult(int id) {
  this.id = id;
}
//Callable接口中的方法
public String call() {
  return "result of TaskWithResult " + id;
}
}

public class CallableDemo {
public static void main(String[] args) {
  ExecutorService exec = Executors.newCachedThreadPool();
  ArrayList<Future<String>> results =new ArrayList<Future<String>>();
  for(int i = 0; i < 10; i++){
	  results.add(exec.submit(new TaskWithResult(i)));
  }
   
  for(Future<String> fs : results){
    try {
      // get() blocks until completion:
      System.out.println(fs.get());
    } catch(InterruptedException e) {
      System.out.println(e);
      return;
    } catch(ExecutionException e) {
      System.out.println(e);
    } finally {
      exec.shutdown();
    }
  }
}
} /* Output:
result of TaskWithResult 0
result of TaskWithResult 1
result of TaskWithResult 2
result of TaskWithResult 3
result of TaskWithResult 4
result of TaskWithResult 5
result of TaskWithResult 6
result of TaskWithResult 7
result of TaskWithResult 8
result of TaskWithResult 9
*///:~

get方法是Future类中:

Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。

  Future类位于java.util.concurrent包下,它是一个接口:

1
2
3
4
5
6
7
8
public interface Future<V> {
    boolean cancel(boolean mayInterruptIfRunning);
    boolean isCancelled();
    boolean isDone();
    V get() throws InterruptedException, ExecutionException;
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}
分享到:
评论

相关推荐

    POSIX多线程程序设计

    线程池是一种多线程处理形式,它可以预创建线程,并复用线程来执行多个任务,这样可以减少线程创建和销毁的开销,提高程序性能。 实际应用中,多线程的使用需要综合考虑问题的解决效率、开发复杂度、资源利用等因素...

    史上最全 Java 多线程面试题及答案

    Java多线程是Java编程中不可或缺的一部分,它允许并发执行多个任务,从而提高应用程序的效率和响应速度。本文将深入探讨Java多线程的相关知识点,包括它的用途、创建线程的方式、start()与run()的区别、Runnable和...

    java多线程面试题

    以上知识点涵盖了多线程编程在Java中的基础理论和实际操作,包括线程的创建、运行、异常处理以及线程安全等问题,这些都是在进行Java多线程面试时常见的问题,对于理解和掌握Java多线程编程至关重要。

    C#操作多线程源码(有注释,通俗易懂)

    在C#编程中,多线程是一个非常关键的特性,尤其在处理大量并发任务或优化程序性能时。本文将深入探讨C#中的多线程操作,结合提供的标题和描述,我们将学习如何创建、管理和同步线程,以及如何通过注释提高代码可读性...

    Java多线程编程总结

    - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个进程拥有独立的内存空间。例如,在Windows系统中,一个运行中的exe文件就是一个进程。 - **...

    多线程编程实例

    MFC支持多线程编程,这在现代软件开发中极为重要,尤其是当需要处理复杂任务或提高应用程序性能时。 #### 二、MFC中的线程分类 MFC中主要存在两种类型的线程:**工作者线程**和**用户界面线程**。这两类线程的主要...

    Posix.rar_POSIX多线程_posix_posix_queue

    在IT行业中,多线程编程是提升程序性能和并发能力的重要技术之一,特别是在POSIX(Portable Operating System Interface)这样的开放标准平台上。POSIX是为操作系统提供接口的一系列标准,它定义了多线程编程的规范...

    java多线程编程总结

    当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的应用程序,每个进程拥有自己独立的一段内存空间。一个进程中可以启动多个线程,例如,在Windows...

    Java多线程.pdf

    Java多线程是Java编程中不可或缺的一个重要概念,它允许程序在同一时间执行多个任务,从而提高了计算机系统的资源利用率和程序的响应速度。本篇将详细阐述Java多线程的基础知识,包括线程的概念、创建线程的方式以及...

    MFC对多线程编程的支持

    在Windows编程中,多线程技术是实现高效并发处理的关键。Microsoft Foundation Class (MFC)库为开发者提供了便捷的多线程编程支持,主要分为工作者线程和用户界面线程两种类型。 工作者线程(Worker Thread)与用户...

    Java多线程、并发编程知识点总结.pdf

    Java多线程编程是Java语言的核心特性之一,它允许程序同时执行多个线程,从而实现多任务的并行处理,提高程序执行效率和用户体验。在Java中,多线程的实现主要涉及到以下几个关键知识点: 1. **线程的基本概念**:...

    linux下多进程、多线程编程

    多线程编程允许在单个进程中创建多个执行路径,从而可以并行执行多个任务。在Linux环境下,使用多线程编程的常见库是POSIX线程库(pthread)。与多进程相比,多线程共享相同的地址空间,因此在通信和同步方面更加...

    Java多线程

    现代操作系统是多任务操作系统,多线程是实现多任务的一种方式。进程指的是一个内存中运行的应用程序,每个进程都有其独立的一块内存空间。一个进程中可以启动多个线程。 - **进程**:一个运行中的应用程序实例,...

    python多线程DAY01.txt

    3.多任务编程 * 并行 和 并发 * 进程 线程 4. 多进程编程 时间片 PCB PID 父子进程 优先级 进程特征 进程状态: 就绪态 运行态 等待态 5. ps -aux ps -ajx pstree top nice 6. os.fork() 7. os.getpid() os....

    JavaConcurrent实用知识库分享知识分享

    Java并发编程是Java开发中的重要领域,涉及到多线程、并发容器、同步机制等多个知识点。在JavaConcurrent库中,提供了丰富的工具类和接口来支持高效的并发编程。 首先,了解多线程的作用至关重要。多线程的主要目的...

    C++ Threading讲解资料

    在多线程编程中,这意味着多个线程可以在同一时间内执行不同的任务。这有助于提高程序的整体性能和响应速度。 - **进程与线程**:一个进程可以被认为是一个包含多个线程的容器,这些线程共享相同的地址空间。进程...

    并发编程 48 道面试题及答案.docx

    但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。 创建线程的方式有: 1. 继承Thread类创建线程类 2. 通过Runnable接口创建...

    JAVA面试题 用于面试前练手,有需要的自取

    本文将详细讲解 Java 面试题,包括线程与进程的区别、多线程中的上下文切换、死锁与活锁的区别、Java 中守护线程和本地线程的区别、为什么使用 Executor 框架、Java 中 Executor 和 Executors 的区别、Java 中用到的...

    2021版java高并发常问面试题

    本文将对Java高并发中常见的面试题进行总结,涵盖了守护线程和用户线程、线程与进程的区别、多线程中的上下文切换、死锁与活锁的区别、Java中的线程调度算法、线程组、Executor框架等知识点。 守护线程和用户线程 ...

Global site tag (gtag.js) - Google Analytics