说说Runnable与Callable

Posted didiaoxiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了说说Runnable与Callable相关的知识,希望对你有一定的参考价值。

Callable接口:

技术分享图片 View Code

 

Runnable接口:

技术分享图片 View Code

 

相同点:

  1. 两者都是接口;(废话)
  2. 两者都可用来编写多线程程序;
  3. 两者都需要调用Thread.start()启动线程;

 

不同点:

  1. 两者最大的不同点是:实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果;
  2. Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛;

 

注意点:

  • Callable接口支持返回执行结果,此时需要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取‘将来’结果;当不调用此方法时,主线程不会阻塞!

 

Callable工作的Demo:

技术分享图片 View Code

 

 

 

 

测试结果:

技术分享图片 View Code

 

 

 

 

Runnable工作的Demo:

技术分享图片 View Code

 

 

测试结果:

技术分享图片 View Code

 

 

写此篇的原因是一次面试中问到Callable与Runnable的区别,当时用的多的是Runnable,而Callable使用很少!

比较了两者后(网上查了不少),发现Callable在很多特殊的场景下还是很有用的!最后留点抄的代码,加深对Callable的认识!

技术分享图片 View Code

 

 
分类: 每天一点

以上是关于说说Runnable与Callable的主要内容,如果未能解决你的问题,请参考以下文章

几种创建线程方式Thread类和Runnable接口

说说线程的生命周期

创建线程的两种方式比较Thread VS Runnable

JAVA采用实现Runnable接口的多线程技术,用50个线程,生成10000个[1-1000]间的随机整数。

Java并发编程:Thread与Runnable的底层原理

关于Thread与runnable