1. Concept
Future represents the result of an asynchronous task that may not have been completed. For this result, a Callback can be added to perform corresponding operations after the task execution succeeds or fails.
2. Future interface
The Future interface defines five main interface methods. RunnableFuture and ScheduleFuture inherit this interface, and CompleteFuture and ForkJoinTask inherit this interface.
3. Example
package test; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class CallableFutureTest { public static void main(String[] args) { long startTime = System.currentTimeMillis(); Callable<Integer> calculateCallable = new Callable<Integer>() { @Override public Integer call() throws Exception { // TODO Auto-generated method stub Thread.sleep(2000);//模拟耗时时间 int result = 1+2; return result; } }; FutureTask<Integer> calculateFutureTask = new FutureTask<>(calculateCallable); Thread t1 = new Thread(calculateFutureTask); t1.start(); //现在加入Thread运行的是一个模拟远程调用耗时的服务,并且依赖他的计算结果(比如网络计算器) try { //模拟耗时任务,主线程做自己的事情,体现多线程的优势 Thread.sleep(3000); int a = 3+5; Integer result = calculateFutureTask.get(); System.out.println("result = "+(a+result));//模拟主线程依赖子线程的运行结果 long endTime = System.currentTimeMillis(); System.out.println("time = "+(endTime-startTime)+"ms"); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
As you can see from the above, it takes about 3 seconds. In fact, it is mainly the time spent by the main thread sleep(3000). If not Using Future and depending on the result of the thread, the time we may need may be 5s (2s for the sub-thread and 3s for the main thread).
The above is the detailed content of In Java, how to get the result of a thread?. For more information, please follow other related articles on the PHP Chinese website!