hooyantsing's Blog

14_走进Callable

字数统计: 294阅读时长: 1 min
2020/08/26

14 走进Callable

狂神说Java JUC并发编程最新版通俗易懂

像 Runnable 一样执行 Callable 线程

中间有个适配类 FutureTask,他实现了 Runnable 接口,而他的构造参数是 Callable 接口

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package callable;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyThread myThread = new MyThread();
FutureTask futureTask = new FutureTask(myThread);
// FutureTask 是 Runnable接口的实现类。Callable - FutureTask - Thread
// * call方法仅执行一次,缓存结果,其他线程将直接获得结果
new Thread(futureTask).start();
new Thread(futureTask).start();

// 获取返回值 get方法会阻塞,因为要等待 Callable 线程执行完才能获取到结果。通常将其放在最后方法代码块最后一行。
System.out.println(futureTask.get());
}
}

class MyThread implements Callable<Integer> {

@Override
public Integer call() throws Exception {
System.out.println("call");
return 1024;
}
}

使用 Callable 需要注意:

  • call方法仅执行一次,缓存结果,其他线程将直接获得结果
  • 获取返回值 get方法会阻塞,因为要等待 Callable 线程执行完才能获取到结果。通常将其放在最后方法代码块最后一行。
CATALOG
  1. 1. 14 走进Callable
    1. 1.1. 像 Runnable 一样执行 Callable 线程
      1. 1.1.1. 案例