实现callable接口,要重写一个call方法(注意是带返回值的)
要用FutureTask接受,在用new Thread的方式,把new 出来的FutureTask的引用,传进去。
如果想获取返回值的话,就要用 引用.get方法
但是呢,这个引用,一般放到最后,因为会造成线程阻塞。
一旦get运行,其他线程就不会运行,等到get完毕之后,才会继续运行,而且这个方法,并不会,执行多次。
只会执行一次。
就相当于,存到内存中一样。在调用的话,没有用。
具体代码
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
class MyThread implements Callable {
@Override
public Integer call() throws Exception {
System.out.println("come in here ....");
try { TimeUnit.SECONDS.sleep(4); }catch (Exception e){ e.printStackTrace(); }
return 1024;
}
}
public class CallableDemo1 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<Integer> futureTask = new FutureTask<>(new MyThread());
new Thread(futureTask,"a").start();
System.out.println(futureTask.get());
System.out.println(Thread.currentThread().getName()+" is done ..");
}
}