JAVA中实现线程第三种方式
程序员文章站
2022-07-10 18:12:35
...
JAVA中实现线程第三种方式
-
实现线程的第三种方式:FutureTask方式,实现Callable接口。(JDK8新特性)
-
这种方式实现的线程可以获取线程的返回值
之前的两种方式(实现Runnable接口 和 继承Tread类并实现run方法)是无法
获取线程的返回值的 -
当系统委派一个线程去执行一个任务,该线程执行完任务之后,可能会有一个执行结果:使用Callable方式实现线程,来获取返回值
-
实现callable接口
这种方法的优点:可以获取线程的执行结果
这种方法的缺点:效率比较低,在获取支线程的执行结果时,当前线程受阻塞。
public class Callable01 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建一个“未来任务”类
//Callable方法相当于run方法,只不过多了个返回值
FutureTask<Integer> futureTask = new FutureTask<>(new Callable<>() {
@Override
public Integer call() throws Exception {
System.out.println("Callable begin");
Thread.sleep(1000 * 10);
System.out.println("Callable over");
int a = 100;
int b = 200;
return a + b; //自动装箱(300变成Integer)
}
});
//创建线程对象
Thread t = new Thread(futureTask);
//线程启动
t.start();
//在主线程中获取支线程的返回值
//get方法会导致当前线程阻塞
int u = futureTask.get(); //自动拆箱(Integer 转为 int//)
System.out.println("支线程执行结果:" + u);
//main方法这里会发生阻塞,必须要等待支线程返回结果才能继续运行
//而get方法可能要等很久
System.out.println("hello world");
}
}
上一篇: HTTP协议基础总结
下一篇: 基础储备----HTTP协议