实现步骤:
创建 Callable 接口的实现类, 并实现 call() 方法, 该 call() 方法将作为线程执行体, 并且有返回值.
创建 Callable 实现类的实例, 使用 FutureTask 类来包装 Callable 对象, 该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值.
使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程.
调用 Tread 对象的 start() 方法启动线程, 调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值.
实例:
- public class CallableThreadTest implements Callable<Integer> {
- @Override
- public Integer call() throws Exception
- {
- int i = 0;
- for(;i<100;i++)
- {
- System.out.println(Thread.currentThread().getName()+" "+i);
- }
- return i;
- }
- public static void main(String[] args) throws ExecutionException, InterruptedException {
- FutureTask<Integer> ft = new FutureTask<>(new CallableThreadTest(http://www.amjmh.com/v/));
- for(int i = 0;i < 100;i++)
- {
- System.out.println(Thread.currentThread().getName()+"的循环变量 i 的值"+i);
- if(i==20)
- {
- new Thread(ft).start();
- }
- }
- System.out.println("子线程的返回值:"+ft.get());
- }
- }
来源: http://www.bubuko.com/infodetail-3156876.html