实现多线程的另一种方式-Callable

package com.mldn.thread;

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

public class TestMyCallable {
     public static void main(String[] args) throws InterruptedException, ExecutionException {
         /*构造方法摘要 
            FutureTask(Callable<V> callable): 
            创建一个 FutureTask,一旦运行就执行给定的 Callable。 
          */

        FutureTask task = new FutureTask(new MyCallable());
        /*
         * class  FutureTask  implements RunnableFuture
         * interface RunnableFuture extends Runnable,Future
         * 说明:FutureTask也是Runnable的子类
         */
        //这里的task可以当作Runnable对象
        
        new Thread(task).start();//启动线程
        System.out.println(task.get());//返回结果
    }
}


/*------------------------自定义类MyCallable---------------------------*/

package com.thread;

import java.util.concurrent.Callable;

/*
 * 自定义类实现Callable接口
 * Runnable和Callable的区别:
 *   Runnable执行完线程程序后没有返回结果(重写run方法)
 *   Callable执行完线程程序后有返回结果 (重写call方法)
 */
public class MyCallable implements Callable<String> {

    @Override
    public String call() throws Exception {
        for(int i=10;i>0;i--){
            System.out.println(i);
        }
        return "票卖完了,下次吧。。。";//有返回结果
    }
}

 

posted @ 2017-09-01 16:12  scwyfy  阅读(127)  评论(0编辑  收藏  举报