Callable 与 Runable 使用心得

介绍:
自JDK1.5以后,Java提供了Callable接口来增强并发编程,用来解决Runable的不足。在这之前,我们如果想实现多线程,一般情况下会使用继承Thread类或实现Runable接口两种方式。但是一直以来,获取返回值一直是一个大问题。通常需要编写大量无关紧要的代码。
Callable与Runable的区别:
1. Callable 使用 call方法,而Runable使用run方法
2. Callable 具有返回值,而Runable没有返回值
 
3. Callable的call方法可抛出异常,而Runnable的run方法不能抛出异常

 用法:
1. Thead复写类:
public class TestThread implements Callable {
    @Override
    public String call() throws Exception {
        return "Hello, World!";
    }
}
这里的Callable是泛型的,其中可以指定其返回类型。比如这里的返回类型为String

2. 调用
public class Tester {
    public static void main(String[] args) throws InterruptedException, ExecutionException { 
        long beginTime = System.currentTimeMillis();
        // 创建一个线程池
        ExecutorService pool = Executors.newFixedThreadPool(1);
        // 创建一个有返回值的任务
        Callable c1 = new TestThread();
        // 执行任务并获取Future对象
        Future f1 = pool.submit(c1);
        // 从Future对象上获取任务的返回值,并输出到控制台
        System.out.println(">>>" + f1.get());
        // 关闭线程池
        pool.shutdown();
        long endTime = System.currentTimeMillis();
        System.out.println("time:" + (endTime - beginTime));
     }
}
一直以来困扰我多线程取值的问题终于解决了,开心~
更多技术文章请关注微信公众号:zssorin,记住我的QQ:2392119885

你可能感兴趣的:(java,多线程,线程,继承,并发,Java进击)