FutureTask的isDone方法

来源:8-4 如何实现处理线程的返回值

抽象汪

2019-10-01

public boolean isDone() {
   return state != NEW;
}

老师,isDone方法是用来判断当前线程状态是否为NEW,若不为NEW则返回true

那么您的FutrueTaskDemo中,

FutureTask<String> task = new FutureTask<String>(new MyCallable());
new Thread(task).start();
if(!task.isDone()){
    System.out.println("task has not finished , please wait");
}
System.out.println(task.get());

task线程已经start了,应该是处于Runnable的状态,那么if判断应该是false才对啊,但是运行结果if是为true的,我想知道我是哪个地方理解错了。

写回答

1回答

翔仔

2019-10-01

同学好,这里是FutureTask的isDone,而不是Thread的,所以new状态在这里并不一定表示是刚创建的。。源码里 NEW -> COMPLETING -> NORMAL  经历这些过程,COMPLETING表示正要赋值给目标对象,这个过程很短,而且到这里也算完成了,所以用NEW来判断是还处于运行中与否

0
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8451 学习 · 1872 问题

查看课程