`
raymond.chen
  • 浏览: 1441342 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

FutureTask的使用

 
阅读更多

FutureTask是一种可以取消的异步的计算任务。它的计算是通过Callable实现的,它等价于可以携带结果的Runnable,并且有三个状态:等待、运行和完成。完成包括所有计算以任意的方式结束,包括正常结束、取消和异常。

 

FutureTask类是Future 的一个实现,并实现了Runnable,所以可通过Excutor(线程池) 来执行,也可传递给Thread对象执行。

 

如果在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给Future对象在后台完成,当主线程将来需要时,就可以通过Future对象获得后台作业的计算结果或者执行状态。

 

public class MyFutureTask extends FutureTask<String> {
	public MyFutureTask(Callable<String> callable) {  
        super(callable);  
    }  
	
	@Override
	protected void done() {
		try {
			System.out.println(get() + " 线程执行完成!");
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
	}
	
}

 

public class Test3 {
	public static void main(String[] args) {
		ExecutorService executor = Executors.newCachedThreadPool();
		
		Callable<String> callable = new Callable<String>() {
			@Override
			public String call() throws Exception {
				return "Task say hello";
			}
		};
		
		//新建一个任务
		MyFutureTask futureTask = new MyFutureTask(callable);
		
		//异步执行任务
        executor.submit(futureTask); 
        
		try{
			//继续做事情
			System.out.println("do something...");
			Thread.sleep(3000);
			
			//获取任务的执行结果
			System.out.println(futureTask.get()); //get方法会导致阻塞,直到返回结果
			
			//继续做事情
			System.out.println("do something...");
		}catch(Exception ex){
			ex.printStackTrace();
		}
		
		executor.shutdown();
	}
	
}

 

分享到:
评论

相关推荐

    futuretask用法及使用场景介绍

    FutureTask用法及使用场景介绍 FutureTask是一种异步获取执行结果或取消执行任务的机制,它可以用来处理耗时的计算任务,使主线程不需要等待计算结果,而是继续执行其他任务。下面将详细介绍FutureTask的用法和使用...

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

    在本篇文章中,我们将深入探讨`ThreadPoolTaskExecutor`的配置及其使用,并结合`FutureTask`来讨论异步任务处理。 首先,让我们了解`ThreadPoolTaskExecutor`的基本配置。在Spring中,我们通常通过在配置文件或Java...

    Java FutureTask类使用案例解析

    Java FutureTask类使用案例解析 Java FutureTask类是一种异步计算的工具,用于执行长时间的任务并获取结果。它实现了Runnable和Future接口,既可以作为一个Runnable对象提交给Executor执行,也可以作为一个Future...

    FutureTask学习

    - `FutureTask`内部使用了一个`volatile`变量`state`来管理任务的状态,确保多线程环境下的可见性和有序性。 - 当`FutureTask`被提交给`Executor`时,`Executor`实际上是在另一个线程中调用`run()`方法。 - 如果...

    Java并发编程原理与实战

    提前完成任务之FutureTask使用.mp4 Future设计模式实现(实现类似于JDK提供的Future).mp4 Future源码解读.mp4 ForkJoin框架详解.mp4 同步容器与并发容器.mp4 并发容器CopyOnWriteArrayList原理与使用.mp4 并发容器...

    Java中Future、FutureTask原理以及与线程池的搭配使用

    理解`Future`和`FutureTask`的工作原理,以及如何与`ExecutorService`配合使用,是进行高效并发编程的关键。在实际应用中,它们常用于处理耗时计算、异步数据获取等场景,提高了程序的响应性和并发性。

    Java项目新手练习小项目

    - 实现Callable接口:与Runnable类似,但Callable可以返回结果并抛出异常,需要配合FutureTask使用。 2. 线程状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待...

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

    `Future`、`FutureTask`、`Callable`和`Runnable`是Java并发编程中的核心接口和类,它们在Android开发中同样有着广泛的应用。下面将详细介绍这些概念以及它们如何协同工作。 1. `Runnable`: 这是Java中最基础的多...

    龙果 java并发编程原理实战

    第42节提前完成任务之FutureTask使用00:11:43分钟 | 第43节Future设计模式实现(实现类似于JDK提供的Future)00:19:20分钟 | 第44节Future源码解读00:29:22分钟 | 第45节Fork/Join框架详解00:28:09分钟 | 第46节...

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

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

    Java 并发编程原理与实战视频

    第42节提前完成任务之FutureTask使用00:11:43分钟 | 第43节Future设计模式实现(实现类似于JDK提供的Future)00:19:20分钟 | 第44节Future源码解读00:29:22分钟 | 第45节Fork/Join框架详解00:28:09分钟 | 第46节...

    龙果java并发编程完整视频

    第42节提前完成任务之FutureTask使用00:11:43分钟 | 第43节Future设计模式实现(实现类似于JDK提供的Future)00:19:20分钟 | 第44节Future源码解读00:29:22分钟 | 第45节Fork/Join框架详解00:28:09分钟 | 第46节...

    java并发编程

    第42节提前完成任务之FutureTask使用00:11:43分钟 | 第43节Future设计模式实现(实现类似于JDK提供的Future)00:19:20分钟 | 第44节Future源码解读00:29:22分钟 | 第45节Fork/Join框架详解00:28:09分钟 | 第46节...

    android 简单同步与异步

    Android开发者可以结合Handler或FutureTask使用线程池,以实现更复杂的异步操作。 在实际开发中,选择哪种异步方式取决于任务的性质和项目的具体需求。对于简单的异步操作,如快速的数据加载,AsyncTask可能是最...

    java-thread-vedio.rar_java vedio

    - **实现Callable接口**:配合FutureTask使用,Callable可以返回结果,而Runnable不能。 2. **线程的状态**: - 新建(New):线程被创建但尚未启动。 - 可运行(Runnable):线程已启动,等待CPU分配时间片执行...

    揭密FutureTask.docx

    《揭密FutureTask:Java异步编程的核心工具》 在Java并发编程中,FutureTask扮演着至关重要的角色,它是实现异步计算的关键组件。本文将深入探讨FutureTask的原理和用法,帮助开发者更好地理解和利用这个强大的工具...

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

    本文将详细介绍Future和FutureTask的关系、使用和分析。 一、Future介绍 Future位于java.util.concurrent包下,是一个接口,定义了五个方法: 1. `cancel(boolean mayInterruptIfRunning)`: 取消任务,取消成功则...

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

    当使用 FutureTask.get() 方法时,将返回 Callable 接口的返回对象。 FutureTask 的核心方法是 run() 方法,该方法执行 Callable 接口的任务逻辑,并将结果返回。在 run() 方法中,firstly,它会检查状态是否为 NEW...

Global site tag (gtag.js) - Google Analytics