`

Future和FutureTask-获取子线程计算结果

 
阅读更多

Callable、Future和FutureTask 配合使用,获取子线程计算结果。

 

当主线程需要做一个耗时的计算时,可以启动一个子线程去处理,子线程处理同时主线程

做自己的事情,当主线程需要子线程的计算结果时候,则取出计算结果,如果这时候子线程

还没有处理完成,则主线程会处于等待状态

 

public class FutureTest {

	public static void main(String[] args) {
		
		FutureTest.Work work = new FutureTest.Work();
		ExecutorService service =  Executors.newFixedThreadPool(10);
		
		Future<Integer> result = service.submit( work);
		service.shutdown(); 
	 
		try {
			
			Thread.sleep(5000);
			
			System.out.println( result.get() ); //等待计算结果
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
		
	}
	
	static class   Work  implements Callable<Integer>{
		@Override
		public Integer call() throws Exception {
			
			Thread.sleep(10000);
			return 10;//计算结果
		}
	}
}

 

 

分享到:
评论

相关推荐

    Java中的Runnable,Callable,Future,FutureTask的比较

    在实际开发中,ExecutorService(如ThreadPoolExecutor)经常与Future和FutureTask一起使用,因为ExecutorService可以提交Runnable或Callable任务,并返回Future,从而实现对任务的异步处理和结果获取。例如: ```...

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

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

    比较java中Future与FutureTask之间的关系

    在Java中,Future和FutureTask都是用于获取线程执行的返回结果,但是它们之间存在一些差异和关联。本文将详细介绍Future和FutureTask的关系、使用和分析。 一、Future介绍 Future位于java.util.concurrent包下,是...

    FutureTask底层实现分析,有了FutureTask主线程要想获得工作线程(异步计算线程)的结果变得比较简单

    FutureTask 底层实现分析 FutureTask 是 Java 中的一种非常重要的多线程设计模式,用于异步计算线程之间的结果传递...7. FutureTask 提供了一个非常方便的方式来获取异步计算线程的结果,使得编程变得更加简单和高效。

    Java使用Callable和Future创建线程操作示例

    Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...

    Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    FutureTask包含了Callable任务和对其结果的封装,当我们调用FutureTask的start()方法时,它会在新的线程上执行Callable的call()方法,并返回一个Future对象,用于后续的结果获取。 结合这些组件,我们可以构建复杂...

    笔记-2、线程的并发工具类2

    - `Future`接口代表异步计算的结果,提供了检查任务是否完成、获取结果、取消任务等方法。 - `FutureTask`是`Future`的一个具体实现,它包装了一个`Callable`对象,可以作为`ExecutorService`的提交任务。 8. **...

    Java 多线程与并发(17-26)-JUC线程池- FutureTask详解.pdf

    `FutureTask`是Java并发库中的一个关键组件,它实现了`RunnableFuture`接口,能够作为`Runnable`接口的实现被线程执行,同时也继承了`Future`接口,用于获取计算的结果。`FutureTask`的设计使得我们可以更加灵活地...

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

    通过`Future`,我们可以检查计算是否完成,取消计算,甚至获取计算的结果。但是,`Future`本身并不提供执行任务的能力,这就引出了`FutureTask`。 `FutureTask`是`Future`的一个实现,同时它也是`Runnable`和`...

    Java面试题-线程多线程.pdf

    `Future` 接口用于获取 `Callable` 执行的结果。例如: ```java class MyCallable implements Callable&lt;Integer&gt; { public Integer call() { // 线程执行逻辑并返回结果 return result; } } FutureTask...

    自用ppt-2012-11-11java线程并发库

    `FutureTask`是Callable和Future的结合体,可以用来执行Callable任务。 4. **Semaphore**:信号量用于限制同时访问特定资源的线程数量。它通过acquire()和release()方法控制许可证的数量,以实现同步。 5. **...

    java多线程编程同步器Future和FutureTask解析及代码示例

    Java多线程编程中,`Future` 和 `FutureTask` 是两种重要的同步工具,它们用于管理异步计算的结果。在Java并发编程中,通常我们会使用`ExecutorService`来提交任务,而`Future`和`FutureTask`就是与这些任务交互的...

    【并发编程】 — Runnable、Callable、Future和FutureTask之间的关系

    2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...

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

    在Java中,我们可以通过`ExecutorService`和`Future`来管理多线程任务,并获取它们的执行结果。`ExecutorService`是`java.util.concurrent`包中的一个接口,用于管理和控制线程的生命周期,如启动线程、关闭线程池等...

    【Java核心知识面试】-java多线程50题.zip

    Future表示异步计算的结果,get()方法阻塞直到结果可用。CompletableFuture提供更强大的组合、转换和回调功能,支持链式调用。 以上只是Java多线程部分核心知识点,实际面试中可能还会涉及线程安全、并发工具类...

    FutureTask学习

    总之,`FutureTask`是Java并发编程中用于异步计算的一个强大工具,它结合了`Runnable`和`Callable`的优点,提供了任务执行状态的检查以及结果的获取。理解和熟练使用`FutureTask`对于编写高效并发程序至关重要。在...

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

    - **并行计算**:在需要对大量数据进行计算时,可以将任务拆分为多个子任务,分别提交给ExecutorService,然后通过Future收集结果。 - **组合任务**:利用CompletableFuture的链式方法,可以方便地组合多个异步任务...

    spring线程池ThreadPoolExecutor配置以及FutureTask的使用

    // 获取计算结果,会阻塞直到任务完成 System.out.println("Computed result: " + computedResult); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } ``` 在上述代码中,我们...

    Java多线程-JDK5.0新增线程创建方式

    `Future`接口提供了一种获取异步计算结果的机制,而`FutureTask`实现了`Runnable`接口和`Future`接口,既可作为线程执行的任务,又可获取任务的结果。 然而,使用`Callable`创建线程也存在一些缺点,最显著的一点是...

    Java分布式应用学习笔记05多线程下的并发同步器

    - **获取结果**:最后,可以通过调用`FutureTask`的`get()`方法来获取计算结果。如果任务尚未完成,`get()`方法将阻塞直到结果可用。 #### 4. 示例代码解析 下面是对文章中给出的示例代码的详细分析: ```java ...

Global site tag (gtag.js) - Google Analytics