FutureTask是一种可以取消的异步的计算任务。它的计算是通过Callable实现的,它等价于可以携带结果的Runnable,并且有三个状态:等待、运行和完成。完成包括所有计算以任意的方式结束,包括正常结束、取消和异常。
Future有个get方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,然后会返回结果或者抛出异常。
FutureTask有下面几个重要的方法:
1.get()
阻塞一直等待执行完成拿到结果
2.get(int timeout, TimeUnit timeUnit)
阻塞一直等待执行完成拿到结果,如果在超时时间内,没有拿到抛出异常
3.isCancelled()
是否被取消
4.isDone()
是否已经完成
5.cancel(boolean mayInterruptIfRunning)
试图取消正在执行的任务
package thread;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class NewThreadDemo {
public static void main(String[] args) throws Exception {
FutureTask<String> task = new FutureTask<String>(
new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("hello");
return "world";
}
});
// method1();
// method2();
method3(task);
String result = task.get();
System.out.println(result);
}
private static void method1() {
new Thread() {
@Override
public void run() {
System.out.println("hello");
}
}.start();
}
private static void method2() {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello");
}
}).start();
}
private static void method3(FutureTask<String> task) {
new Thread(task).start();
}
}