状态 | 具体描述 |
---|---|
未启动状态 | 在FutureTask.run()方法执行以前,处于未启动状态 |
已启动状态 | FutureTask.run()方法已经执行了,可是任务还未执行完 |
已完成状态 | run()方法已经执行完成 |
4. 针对上面的三种状态,FutureTask.cancel()方法也对应有三种取消时间java
取消时的状态 | 具体描述 |
---|---|
未启动状态 | 执行FutureTask.cancel()方法将此任务永远不会执行 |
已启动状态 | 执行FutureTask.cancel(true)方法将以中断线程的方式来阻止任务继续进行,若是执行FutureTask.cancel(false)将不会对正在执行任务的线程有任何影响; |
已完成状态 | 执行FutureTask.cancel(…)方法将返回false |
public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { for (int i = 0; i < 10; i++) { try { Thread.sleep(100); System.out.println("第" + i +"次运行结束"); }catch (InterruptedException e) { e.printStackTrace(); } } } }; FutureTask futureTask = new FutureTask(runnable,"gogo"); new Thread(futureTask).start(); try { futureTask.get(); System.out.println("程序执行完毕"); } catch (Exception e) { } }
能够看到主线程会等待副线程所有执行完毕才返回结果。web