本文共 1288 字,大约阅读时间需要 4 分钟。
import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.FutureTask;public class Test2 { public void Test2() { ExecutorService threadpool = Executors.newCachedThreadPool(); FutureTaskfTask = new FutureTask (new testTask()); threadpool.execute(fTask); try { System.out.println("result = "+fTask.get()); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } /* FutureStask 是Future 的实现类,同时也是Runnable的实现类,因此它可以被提交给Executor执行,作为一个线程运行,并在此线程中 处理关联的线程的返回值。 You would only need to use FutureTask if you want to change its behavior or access its Callable later. For 99% of uses, just use Callable and Future. FutureTask提供了一种异步方式获取来获取某个Callable线程的执行结果,stackoverflow的讨论帖认为,两者仅有API上的区别,实际使用中, FutureTask并没有太大的优势。 */ threadpool.shutdown(); } public class testTask implements Callable { @Override public Long call() throws Exception { // TODO Auto-generated method stub int i = 1; long result = 0; for( ;i < 500000; i++ ) //计算一个累加值并返回 { result += i; } return result; } }}
转载地址:http://wthii.baihongyu.com/