多线程之创建线程的方式之一:实现Callable接口(三)

来源:互联网 发布:淘宝退款不退货的技巧 编辑:程序博客网 时间:2024/06/03 02:26

对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说。这篇博文我们介绍第三种:实现Callable接口。

Callable接口

接口定义:

@FunctionalInterfacepublic interface Callable<V> {    V call() throws Exception;}
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

从Callable的定义可以看出:

  1. Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的,方法可以有返回值,并且可以抛出异常。但是Runnable不行。
  2. Callable需要依赖FutureTask,用于接收运算结果。一个产生结果,一个拿到结果。FutureTask是Future接口的实现类,也可以用作闭锁。

简单实例

计算0到100相加,返回结果。

public class TestCallable {    public static void main(String[] args) {        CallableThreadDemo ctd = new CallableThreadDemo();        //1.执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果        FutureTask<Integer> result = new FutureTask<Integer>(ctd);        new Thread(result).start();        //2.接收线程运算后的结果        try {            Integer sum = result.get(); //FutureTask 可用于闭锁            System.out.println(sum);        } catch (InterruptedException | ExecutionException e) {            e.printStackTrace();        }    }}class CallableThreadDemo implements Callable<Integer>{    @Override    public Integer call() throws Exception {        int sum = 0;        for (int i = 0; i <= 100; i++) {            sum += i;        }        return sum;    }}
  • 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
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

总结

Callable接口其实特别简单,在多线程环境中,返回结果。

下篇博文,我们研究如何解决多线程安全问题。

0 0
原创粉丝点击