多线程之创建线程的方式之一:实现Callable接口(三)
2017-03-16 17:23
429 查看
对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说。这篇博文我们介绍第三种:实现Callable接口。
从Callable的定义可以看出:
Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的,方法可以有返回值,并且可以抛出异常。但是Runnable不行。
Callable需要依赖FutureTask,用于接收运算结果。一个产生结果,一个拿到结果。FutureTask是Future接口的实现类,也可以用作闭锁。
下篇博文,我们研究如何解决多线程安全问题。
Callable接口
接口定义:@FunctionalInterface public interface Callable<V> { V call() throws Exception; }
从Callable的定义可以看出:
Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的,方法可以有返回值,并且可以抛出异常。但是Runnable不行。
Callable需要依赖FutureTask,用于接收运算结果。一个产生结果,一个拿到结果。FutureTask是Future接口的实现类,也可以用作闭锁。
简单实例
计算0到100相加,返回结果。public class TestCallable { public static void main(String[] args) { CallableThreadDemo ctd = new CallableThreadDemo(); //1.执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果 FutureTask<Integer> result = new FutureTask<Integer>(ctd); new Thread(result).start(); //2.接收线程运算后的结果 try { Integer sum = result.get(); //FutureTask 可用于闭锁 System.out.println(sum); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } } class CallableThreadDemo implements Callable<Integer>{ @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i <= 100; i++) { sum += i; } return sum; } }
总结
Callable接口其实特别简单,在多线程环境中,返回结果。下篇博文,我们研究如何解决多线程安全问题。
相关文章推荐
- java多线程 -- 创建线程的第三者方式 实现Callable接口
- 多线程之创建线程的方式之一:实现Callable接口
- 多线程之创建线程的方式之一:实现Callable接口(三)
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- 多线程创建方式三之实现Callable接口
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 09-多线程(创建线程的第二种方式—实现Runnable接口)1 2 10-多线程(第二种方式的细节) 11-多线程(第二种方式的好处)
- 创建执行线程的方式三:实现 Callable 接口
- 黑马程序员_笔记_多线程(创建线程的第二种方式:实现Runable接口)
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 创建线程的第三种方式:实现Callable接口
- JUC-006-创建线程的方式三-实现Callable接口
- Java多线程实用篇之实现Callable接口,处理带有返回值的线程!
- 线程的第二种创建方式 实现接口Runnable
- 创建线程的两种方式(实现接口的方式请看实例分析5)
- Java核心内库-线程-通过实现Runnable接口的方式创建并启动线程
- 创建线程的第二种方式:实现一个接口Runnable。
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- 多线程(创建线程-实现Runnable接口)
- java多线程学习1-继承Thread类和实现Runnable接口来创建线程