带有返回值的线程接口Callable
函数接口
public interface Callable<V> {
public V call() Throws Exception;
接口继承关系
从关系图中我们可以看出FutureTask这个类继承了Runnable、Callble、Future类,也就是说,Runnable中关于线程启动的start函数和Calllable中Call()函数以及Future中的get()函数:取得call函数的返回值等在FutureTask中可以实现
实现步骤:
- 将Callable接口封装在FutureTask中,然后传入Thread类中
- 由于FutureTask中继承了操作的方法,利用Thread类来进行线程的操作
- 我们写代码只需要实现Callable接口部分就好
代码如下
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
class MyThread1 implements Callable<String> {
public String call() throws Exception {
for (int x = 0 ; x < 10 ; x ++) {
System.out.println("***************线程执行,x =" + x);
}
return "线程执行完毕";
}
}
public class Ali_5 {
public static void main(String[] args) throws Exception {
FutureTask<String> task = new FutureTask<String>(new MyThread1()) ;
new Thread(task).start();
System.out.println("县城返回书籍" + task.get());
}
}
其中call函数与run函数用法大致相同