`
冰封之月
  • 浏览: 18054 次
社区版块
存档分类
最新评论

获取子线程返回结果(Future的使用)

阅读更多
当我们在主线程中起一个线程去处理任务,通常这个处理过程是异步的,主线程直接响应结果。
但如果这个过程是同步的,即主线程等待子线程的响应后,再去响应,应该怎么做?

执行任务的类,类似实现Runnable。
要设置一个泛型,即任务的返回结果
public class MyCallable implements Callable<Integer> {
	//返回一个随机数
	@Override
	public Integer call() throws Exception {
		int result=new Random().nextInt(20);
		System.out.println(Thread.currentThread().getName()+"计算中...");
		//模拟耗时
		Thread.sleep(2000);
		return result;
	}

}


主线程
public class Main {
	public static void main(String[] args) {
		//设置一个future返回结果
		FutureTask<Integer> future=new FutureTask<>(new MyCallable());
		//启动线程开始执行任务
		new Thread(future).start();
		
		System.out.println("before future get...");
		try {
			//如果任务没有完成 主线程会阻塞在这里 直到有返回结果
			System.out.println(future.get());
		} catch (InterruptedException | ExecutionException e) {
			e.printStackTrace();
		}
		
		System.out.println("after future...");
	}
}
分享到:
评论

相关推荐

    多线程执行完后主程序再执行(包括需要子线程返回结果)

    本文将详细探讨如何在多线程环境中确保所有子线程执行完毕后,主程序再进行后续操作,并且如何获取子线程的返回结果。这涉及到线程的同步与通信,是理解并发编程的关键点。 首先,多线程执行时,主线程会创建并启动...

    Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable

    4. `FutureTask`: `FutureTask`结合了`Runnable`和`Future`的功能,它可以包装一个`Callable`对象,并作为`Runnable`提交给`Executor`,同时它也是一个`Future`,可以用来获取计算结果。创建`FutureTask`的示例: `...

    Java利用future及时获取多线程运行结果

    getResult方法用于从future中获取线程结果,并打印结果。 在generate方法中,使用ExecutorService的submit方法来提交Callable任务,并将返回的Future对象添加到futureList中。然后,在getResult方法中,使用...

    JAVA主线程等待子线程执行完毕再执行[参照].pdf

    在上面的示例中,我们使用了 `ExecutorService` 来提交子线程,并获取了一个 `Future` 对象。然后,主线程处理其他工作,让子线程异步去执行。最后,我们使用 `future.get()` 方法来等待子线程的结束。 JAVA 中的...

    Java多线程之异步Future机制的原理和实现共5页.p

    异步Future机制是Java多线程中用于提升效率和优化资源利用的一种设计模式,它允许我们在主线程中不等待子线程的执行结果,而是通过Future对象来获取子线程的计算结果。这种方式极大地提高了程序的响应速度,尤其是在...

    通过多线程任务处理大批量耗时业务并返回结果

    3. `submit()`方法:用于向`ExecutorService`提交任务,如果任务是`Callable`,它将返回一个`Future`,可以通过`Future.get()`来获取任务结果。 4. `CompletionService`:可能是`ExecutorCompletionService`,它...

    java并发(二十四)多线程结果组装

    4. **使用ExecutorService提交任务**:通过`ExecutorService`的`submit()`方法,可以将`Callable`或`Runnable`任务提交给线程池执行,并返回一个`Future`对象,用于后续获取结果。 5. **结果组装**:在多线程环境下...

    图解CompletableFuture不创建线程的使用场景方法详解.docx

    面分析了 Future,通过它我们可以获取线程的执行结果,它虽然解决了 Runnable 的 “三无” 短板,但是它自身还是有短板: 不能手动完成计算 假设你使用 Future 运行子线程调用远程 API 来获取某款产品的最新价格,...

    Java多线程Callable和Future接口区别

    Java多线程Callable和Future接口是Java语言中两个非常重要的接口,它们都是Java多线程编程中使用的接口,用于描述异步计算的结果。在JavaSE5中引入的Callable是一个具有类型参数的范型,他的类型参数方法表示为方法...

    C++ 等待线程结束

    在这个例子中,`get()`方法用于等待并获取异步计算的结果,同时也等待对应的线程结束。 总的来说,C++提供多种方式来管理线程的生命周期,包括`join()`、`detach()`以及`std::future`和`std::async`。理解这些工具...

    Spring Boot多线程demo

    在 Controller 中可以使用 Future 对象来获取异步执行的结果。例如: ```java @RestController public class MyController { @Autowired private MyService myService; @GetMapping("/async") public String ...

    C++多线程获取返回值方法详解

    在C++11标准中,我们可以使用std::future和std::promise来获取线程返回值。std::future表示存储着一个未来会被初始化的变量,而std::promise用于设置这个变量的值。例如,在计算(a+b)/(x+y)的值时,我们可以使用...

    Java线程使用教程

    3. **Future和Callable**:`Future`代表异步计算的结果,`Callable`用于创建能返回结果的线程任务,两者结合使用可获取线程执行结果。 四、并发工具类 1. **CountDownLatch**:用于计数,当计数器归零时所有等待的...

    线程的各种使用方式Demo

    - **Future**:表示Callable任务的未来结果,可以检查任务是否完成,获取结果或取消任务。 7. **线程中断** - `Thread.interrupt()`:标记线程中断状态,通常配合`isInterrupted()`或`interrupted()`检查中断状态...

    有返回值的线程

    如果我们需要线程返回结果,可以使用`Callable`接口,它定义了一个`call()`方法,该方法可以返回一个`V`类型的值。下面是一个简单的例子: ```java class MyTask implements Callable&lt;Integer&gt; { @Override ...

    Java线程 高级使用

    - **使用Callable和Future**:对于需要返回结果的任务,可以使用Callable接口替代Runnable接口,并通过Future获取结果。 - **启动线程**:通过调用Thread对象的`start()`方法启动线程,这将调用内部的`run()`方法...

Global site tag (gtag.js) - Google Analytics