Future的使用
作者:bin通过Future配合Callable可以获取线程执行的结果,并且可以阻塞获取
public class SquareCalculator {
private ExecutorService executor = Executors.newSingleThreadExecutor();
@Test
public void test() throws Exception{
Future<Integer> a = calculate(100);
/**
* 使用isDone()方法判断是否执行结束
*/
while (!a.isDone()){
TimeUnit.SECONDS.sleep(1);
System.out.println("线程执行中");
/**
* 可以使用cancel取消线程执行
* 同时使用a.isCancelled()查看取消结果
*/
//a.cancel(true);
//System.out.println(a.isCancelled());
}
/**
* 使用get()方法获取结果,该方法是阻塞的
*
* 也可以设置超时间5s :a.get(5, TimeUnit.SECONDS);
*/
System.out.println("线程执行结果" + a.get());
}
/**
* 抛出线程,返回Future类
* @param input
* @return
*/
public Future<Integer> calculate(Integer input) {
return executor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
TimeUnit.SECONDS.sleep(10);
return input * input;
}
});
}
}