本文只谈使用,不谈其他,代码均可直接执行
Future<V>的使用:
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;
public class FutureTest
{
public static void main(String[] args) throws InterruptedException, ExecutionException
{
Future<Integer> future = null;
ExecutorService executorService = Executors.newCachedThreadPool();
CallableHandler task = new CallableHandler();
future = executorService.submit(task);
executorService.shutdown();
System.out.println(future.get());
}
}
class CallableHandler implements Callable<Integer>
{
@Override
public Integer call() throws Exception
{
Thread.sleep(3000);
return Integer.MAX_VALUE;
}
}
FutureTask的使用:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class FutureTask1
{
public static void main(String[] args) throws InterruptedException, ExecutionException
{
ExecutorService executor = Executors.newCachedThreadPool();
CallableHandler callableHandler = new CallableHandler();
FutureTask<Integer> futureTask = new FutureTask<>(callableHandler); //使用了FutureTask之后不需要再用Future<T>类去接收返回值了,更便利了
executor.submit(futureTask);
executor.shutdown();
System.out.println(futureTask.get());
}
}
class CallableHandler implements Callable<Integer>
{
@Override
public Integer call() throws Exception
{
Thread.sleep(3000);
return Integer.MAX_VALUE;
}
}
当然了 FutureTask<V>的使用不一定要用ExecutorService通过submit()执行
还可以使用new Thread(FutureTask task)的方式
因为FutureTask类继承自RunnableFuture接口,而RunnableFuture接口继承自Runnable, Future这两个接口,所以FutureTask的示例可以向上转型为Runnable类型,自然就可以通过
new Thread(FutureTask task)的方式执行了
代码如下:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class FutureTask1
{
public static void main(String[] args) throws InterruptedException, ExecutionException
{
CallableHandler callableHandler = new CallableHandler();
FutureTask<Integer> futureTask = new FutureTask<>(callableHandler); //使用了FutureTask之后不需要再用Future<T>类去接收返回值了,更便利了
new Thread(futureTask).start();
System.out.println(futureTask.get());
}
}
class CallableHandler implements Callable<Integer>
{
@Override
public Integer call() throws Exception
{
Thread.sleep(3000);
return Integer.MAX_VALUE;
}
}