Callable 接口
? Java 5.0 在 java.util.concurrent 提供了一个新的创建执行
线程的方式: Callable 接口
? Callable 接口类似于 Runnable, 两者都是为那些其实例可
能被另一个线程执行的类设计的. 但是 Runnable 不会返
回结果, 并且无法抛出经过检查的异常.
? Callable 需要依赖 FutureTask ,FutureTask 也可以用作闭锁
创建执行线程的方法有四种:
1, 继承 Thread 类或者创建线程类
2, 通过实现 Runable 接口创建线程类
3, 通过 Callable 接口
4, 通过线程池创建线程
相对于 Runable 接口的不同:
可以使用泛型, 方法可以有返回值没并且可以抛出异常
实例:
- public class TestCallabel {
- public static void main(String[] args) {
- ThreadDemoCallable tc = new ThreadDemoCallable();
- // 此时的使用方式有些不同
- //1, 需要 FutureTask 实现类的支持, 用于接收运算结果
- FutureTask<Integer> result = new FutureTask<>(tc);
- new Thread(result).start();
- //2, 接收运算的结果
- // 注意: 只有上述的线程之后下方的代码才会执行 ---- 闭锁
- try {
- Integer sum = result.get();
- System.out.println(sum);
- } catch (InterruptedException e) {
- e.printStackTrace();
- } catch (ExecutionException e) {
- e.printStackTrace();
- }
- }
- }
- // 可以使用泛型
- class ThreadDemoCallable implements Callable<Integer>{
- @Override
- public Integer call() throws Exception {
- // 计算整合
- int sum = 0;
- for(int i = 0;i <10;i++){
- sum +=i;
- }
- return sum;
- }
- }
效率高
可以实现和闭锁一样的实现功能
来源: http://www.bubuko.com/infodetail-3041292.html