🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### FutureTask FutureTask也可以用作闭锁; FutureTask实现了Future语义,表示一种抽象的可生成结果的计算;Future表示的计算是通过Callable来实现,相当于一种可生成结果的Runnable,并且可处于以下三种状态:等待运行,正在运行\(Running\)和运行完成\(Completed\); FutureTask.get的行为取决于任务的状态;如果任务已经完成,那么get会立即返回结果,否则将阻塞直到任务进入完成状态,然后返回结果或抛出异常; FutureTask将计算结果从执行计算的线程传递到获取这个结果的线程,而FutureTask的规范确保了这种传递过程能实现结果的安全发布; 示例: ``` public class Appliction { public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException { FutureTask futureTask = new FutureTask(()->{ Result result = new Result(); TimeUnit.SECONDS.sleep(10); result.setCount(10); return result; }); Thread thread = new Thread(futureTask); thread.start(); Result result = (Result) futureTask.get(3,TimeUnit.SECONDS); System.err.println(result.getCount()); } } class Result{ private int count; public int getCount() { return count; } public void setCount(int count) { this.count = count; } } ```