目录
实现线程的第3种方式
# JUC FutureTask 类
JUC(java.util.concurrent)并发包的 FutureTask 类 =======
目录
实现线程的第3种方式
# JUC FutureTask 类
JUC(java.util.concurrent)并发包的 FutureTask 类 >>>>>>> 593e4ea (添加了SSM) 第 3 种方式:未来任务类+Callable 接口+重写 call 方法
优点:call 方法有返回值,也就是 FutureTask 类有返回值
# 例子
简单示例
Thread t = new Thread(FutureTask对象);
FutureTask futureTask = new FutureTask(Callable接口)
实现第三种线程并且拿到返回值的步骤:
- 创建一个"未来任务类",通过构造方法传入一个实现了 callable 接口的类,或者直接匿名内部类
- 创建线程对象,然后把这个"未来任务类"的对象传进去.
- 启动线程.
- 要在当前线程中拿到这个线程的返回值,我们通过调用"未来任务类"的 get 方法,来接这个返回值
完整例子
FutureTask futureTask = new FutureTask(Callable接口){(new Callable() {
@Override
public Object call() throws Exception {
System.out.println(Thread.currentThread().getName()+" call method begin!");
Thread.sleep(1000*5);
System.out.println(Thread.currentThread().getName()+" call method end!");
int a= 100;
int b = 200;
return a+b; // 300被自动装箱成 Integer
}
});
Thread t = new Thread(futureTask);
t.start();
Object object = futureTask.get();
...
}
# 缺点
像 join 方法(详见“调度线程的方法”)。不过 FutureTask 是有返回值的。join 没有返回值
join 作用是,当前运行的线程立即进入阻塞,用 join 方法的线程立刻插队。谁调用 join,谁就是 VIP,能立刻插队
效率低
自己理解:不如 synchronized 框柱局部代码的效率高
- 跟随系统
- 浅色模式
- 深色模式
- 阅读模式