欲善编程,多看、敲、讨论;动眼、手、大脑。
1 为什么要用Callable
前面已经介绍了基于Thread和Runnable两种方法定义线程主体。细心的人可能会发现这么一个问题,那就是不论是哪种方法,我们都不知道线程是什么时候执行结束的。所以又提供了第三种多线程主体定义的形式:实现Callable接口。
2 创建一个实现Callable的对象
我们先创建一个CallableDemo类,并在里面创建一个MyThread3内部类,MyThread3实现Callable接口。实现之后,MyThread3就是一个实现了Callable的一个子类,请注意,callable有一个泛型,这个泛型的数据类型取决议call方法return的数据类型。MyThread3类代码如下图。
MyThread3,添加一个call()方法,代替原来的run方法,编写业务核心。本次线程依然是实现了一个从1到100的报数功能。在报数结束之后,返回线程执行结束的通知。实际业务中,可以返回执行过程统计后得到的数据。
3 创建并启动线程
我们通过new FutureTask