介绍:
自JDK1.5以后,Java提供了Callable接口来增强并发编程,用来解决Runable的不足。在这之前,我们如果想实现多线程,一般情况下会使用继承Thread类或实现Runable接口两种方式。但是一直以来,获取返回值一直是一个大问题。通常需要编写大量无关紧要的代码。
Callable与Runable的区别:
1. Callable 使用 call方法,而Runable使用run方法
2. Callable 具有返回值,而Runable没有返回值
3. Callable的call方法可抛出异常,而Runnable的run方法不能抛出异常
用法:
1. Thead复写类:
2. 调用
更多技术文章请关注微信公众号:zssorin,记住我的QQ:2392119885
自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<String> {
@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