在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啊。
分享到:
相关推荐
大家都知道实现多线程的2种方式,今天来讲讲Future实现具有返回值的线程。应用场景:前端调用时无需等待线程结束返回,线程结束后需进行其它操作如更新状态、通知kafuka等。
然而,Python的`threading`模块本身并不直接支持获取线程函数的返回值,这需要我们通过一些额外的方式来实现。以下将详细解释如何在Python中使用`threading`获取线程函数的返回值。 首先,我们需要理解`threading`...
大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,但是Runnable接口的run方法没有返回值,而Callable接口的call方法有返回值,那么Callable接口是如何做到的呢?在此我给出一个Demo,看看通过...
- 线程有多种状态,包括新建、可运行、运行、等待、暂停、终止等。 - 可以使用`GetThreadContext()`,`GetThreadTimes()`,或`QueryThreadCycleTime()`等API查询线程状态。 4. **线程同步**: - 为了确保线程...
在编程领域,线程是程序执行的一个独立路径,它允许程序同时执行多个任务。在易语言这样的编程环境中,处理线程并返回数据是一项常见的需求。本文将深入探讨易语言中线程返回数据的方法,帮助开发者更好地理解和应用...
线程有新建(NEW)、可运行(RUNNABLE)、运行(RUNNING)、阻塞(BLOCKED)、等待(WAITING)和终止(TERMINATED)六种状态。当start()方法被调用后,线程进入可运行状态,等待JVM调度进入运行状态。run()方法执行...
C++多线程获取返回值方法详解 在C++多线程编程中,获取线程返回值是一个很重要的 topic。在C++11标准中,std::thread对象会忽略顶层函数的返回值,这就使得获取线程返回值变得困难。下面我们将详细介绍两种获取...
NULL 博文链接:https://icgemu.iteye.com/blog/467848
与 BeginInvoke 对应 有个 EndInvoke 方法, EndInvoke 方法可以收集线程函数的返回值。例如,MyDelegate dele = new MyDelegate (MyFunction); IAsyncResult ref = dele.BeginInvoke(10,"abcd"); ... int result = ...
在许多时候,我们会有这样的需求——即我们想要得到线程返回的值。 但是在C++11 多线程中我们注意到,std::thread对象会忽略顶层函数的返回值。 那问题来了,我们要怎么获得线程的返回值呢? 我们通过一个例子来说明...
在编程领域,线程是程序执行的独立路径,可以并发执行任务,提高程序的效率。在易语言中,创建和管理线程是一项重要的技能。本文将深入探讨如何在易语言中实现线程返回数据的方法,以及相关的源码解析。 易语言是一...
最近有个需求,用多线程比较合适,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 import threading class MyThread(threading.Thread): def __init__(self,func,args=()): super...
`get_result`方法用于获取线程的返回值,如果线程已经执行且有结果,就返回`result`;否则,返回`None`。 接下来,我们看如何使用这个自定义的`MyThread`类来创建和管理线程。假设有一个`threadItem`函数,它会发送...
通过这种方式,我们可以在线程执行后获取到一个返回值,解决了`run()`方法没有返回值的问题。这种方法适用于那些需要在主线程中等待子线程完成并获取其结果的场景,例如计算密集型任务或网络请求等。
在标题和描述中提到的“QT+moveToThread线程+connect信号槽+信号返回值”是QT编程中的关键概念,下面将详细解释这些知识点。 首先,我们来探讨`moveToThread`。在多线程编程中,`QObject`的一个重要特性是它可以...
1. **Joinable状态**:线程默认创建时即处于joinable状态,意味着线程一旦完成执行,它的资源并不会自动释放,需要其他线程(通常是主线程)调用pthread_join()函数等待该线程的结束,并获取其返回值。这样做的好处...
常见的标志有`CREATE_SUSPENDED`,用于创建一个暂停状态的新线程。 - `lpThreadId`: 指向一个变量的指针,用于接收新创建线程的标识符。 #### 二、线程终止方法 线程的终止可以采用多种方式,下面详细介绍几种...
1. 创建Callable接口的实现类,并实现call()方法,该call()方法将作为该线程的执行体,且该call()方法有返回值,再创建Callable的实例。从Java 8开始,可以直接使用Lamda表达式创建Callable对象。 2. 使用...
返回值是一个`std::future`对象,该对象可以用来获取异步任务的结果。当异步任务完成后,`std::future`可以通过`get()`方法获取结果,或者通过`valid()`检查任务是否已完成。如果任务尚未完成,调用`get()`会阻塞...