FutureTask的简单使用

FutureTask

创建FutureTask可用于接收线程的运行结果。一般Runable的接口里的抽象方法run是void型的,我们如果想要拿到某个线程的执行结果来用,显然重写 run() 方法里是不容易办到的。我们就可以创建 FutureTask 传入Callable接口的实现类,在实现类中重写 T call() 方法,执行任务逻辑,等到我们需要线程的执行结果时,调用get方法就可以了

FutureTask 可用于异步获取执行结果或取消执行任务的场景。通过传入 Runnable 或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过 FutureTask 的 get 方法异步获取执行结果,因此,FutureTask 非常适合用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。另外,FutureTask 还可以确保即使调用了多次 run 方法,它都只会执行一次 Runnable 或者 Callable 任务,或者通过 cancel 取消 FutureTask 的执行等。

@org.junit.Test
public void Test( ) {
		
	// 创建FutureTask用来接收线程运行的结果
	FutureTask<Integer> threadResult = new FutureTask<Integer>(new Callable<Integer>() {
			
		int count = 0;
			
		@Override
		public Integer call() throws Exception {
			// 执行一系列任务逻辑
			count++;
			return count;
		}
			
	});
		
	// 开启线程
	new Thread(threadResult).start();
		
	try {
		// 拿到线程的执行结果
		Integer result = threadResult.get();
		System.err.println(result);
	} catch (InterruptedException | ExecutionException e) {
		e.printStackTrace();
	}
		
}

这有一篇更为详细的资源

你可能感兴趣的:(java)