示例代码:
class th implements Callable<Integer> {
@Override
public Integer call() throws Exception {
System.out.println(Thread.currentThread().getName()+"== come in ");
Thread.sleep(3);
return 1024;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<Integer> futureTask=new FutureTask<>(new th());
new Thread(futureTask,"t1").start();
//两个线程执行同样的代码实际只会执行一次,会复用上次的
new Thread(futureTask,"t2").start();
//如果futureTask.isDone()为false代表没有算完,那就一直循环,返回true然后取反就结束循环往
//下走,取值
while (!futureTask.isDone()){
}
Integer d = futureTask.get();
System.out.println(d);
}
}
执行结果(只执行一次):
t1== come in
1024
要执行两次的话,在开一个线程:
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<Integer> futureTask=new FutureTask<>(new th());
new Thread(futureTask,"t1").start();
//除非在开一个线程
FutureTask<Integer> futureTask2=new FutureTask<>(new th());
new Thread(futureTask2,"t2").start();
//如果futureTask.isDone()为false代表没有算完,那就一直循环,返回true然后取反就结束循环往下走,取值
while (!futureTask.isDone()){
}
Integer d = futureTask.get();
System.out.println(d);
}
执行结果:
t1== come in
t2== come in
1024