实现线程的第三种方式
- 使用Callable结合Task实现多线程编程
- 前两种 分别是:继承Thread类;实现Runnable接口
- 实现线程的第三种方式:FutureTask,未来任务类对象
- 好处:这种方式创建线程对象,可以获得线程的返回值
- 缺点:在获取返回值的时候,会造成主线的阻塞
package com.itguo.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class ThreadTest10 {
public static void main(String[] args) {
//这个不是线程对象
FutureTask futureTask = new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
int num = 0;
for (int i = 0; i <10 ; i++) {
//求i的累加
num += i;
System.out.println(Thread.currentThread().getName()+" "+i);
}
//睡眠0.5秒
Thread.sleep(500);
//有返回值了,但必须等到线程结束之后才能返回
return num;
}
});
//线程对象
Thread thread = new Thread(futureTask);
//设置线程名称
thread.setName("t1");
//启动线程
thread.start();
try {
//获取线程结束之后的返回值
Object obj = futureTask.get();
System.out.println(obj);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
//模拟缺点
System.out.println("这是主线程想要执行的内容");
}
}
输出结果:
t1 0
t1 1
t1 2
t1 3
t1 4
t1 5
t1 6
t1 7
t1 8
t1 9
45
这是主线程想要执行的内容
Process finished with exit code 0