Runnable与Callable区别
相同点:
- 两者都是接口;(废话)
- 两者都可用来编写多线程程序;
- 两者都需要调用Thread.start()启动线程;
不同点:
- 两者最大的不同点是:实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果;
- Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛;
注意点:
- Callable接口支持返回执行结果,此时需要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取‘将来’结果;当不调用此方法时,主线程不会阻塞!
Callable工作的Demo:
- package com.callable.runnable;
- import java.util.concurrent.Callable;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.FutureTask;
- /**
- * Created on 2016/5/18.
- */
- public class CallableImpl implements Callable<String> {
- public CallableImpl(String acceptStr) {
- this.acceptStr = acceptStr;
- }
- private String acceptStr;
- @Override
- public String call() throws Exception {
- // 任务阻塞 1 秒
- Thread.sleep(1000);
- return this.acceptStr + " append some chars and return it!";
- }
- public static void main(String[] args) throws ExecutionException, InterruptedException {
- Callable<String> callable = new CallableImpl("my callable test!");
- FutureTask<String> task = new FutureTask<>(callable);
- long beginTime = System.currentTimeMillis();
- // 创建线程
- new Thread(task).start();
- // 调用get()阻塞主线程,反之,线程不会阻塞
- String result = task.get();
- long endTime = System.currentTimeMillis();
- System.out.println("hello : " + result);
- System.out.println("cast : " + (endTime - beginTime) / 1000 + " second!");
- }
- }
Runnable的Demo
- package com.callable.runnable;
- /**
- * Created on 2016/5/18.
- */
- public class RunnableImpl implements Runnable {
- public RunnableImpl(String acceptStr) {
- this.acceptStr = acceptStr;
- }
- private String acceptStr;
- @Override
- public void run() {
- try {
- // 线程阻塞 1 秒,此时有异常产生,只能在方法内部消化,无法上抛
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- // 最终处理结果无法返回
- System.out.println("hello : " + this.acceptStr);
- }
- public static void main(String[] args) {
- Runnable runnable = new RunnableImpl("my runable test!");
- long beginTime = System.currentTimeMillis();
- new Thread(runnable).start();
- long endTime = System.currentTimeMillis();
- System.out.println("cast : " + (endTime - beginTime) / 1000 + " second!");
- }
- }
转自
Runnable与Callable区别的更多相关文章
- Java多线程Runnable与Callable区别与拓展
我们先来分别看一下这两个接口 Runnable: // // Source code recreated from a .class file by IntelliJ IDEA // (powered ...
- Java Runnable与Callable区别
接口定义 #Callable接口 public interface Callable<V> { V call() throws Exception; } #Runnable接口 publi ...
- java 并发包runnable 与 callable
1.runnable 与 callable区别 2.避免callable执行完任务,获取返回结果时,阻塞其他子线程 下面固定线程池,设置4个,表明同时只有4个线程在执行任务,当某个线程执行完一个任务, ...
- Android进阶——多线程系列之Thread、Runnable、Callable、Future、FutureTask
多线程一直是初学者最抵触的东西,如果你想进阶的话,那必须闯过这道难关,特别是多线程中Thread.Runnable.Callable.Future.FutureTask这几个类往往是初学者容易搞混的. ...
- Runnable和Callable之间的区别
Runnable和Callable之间的区别 1.Runnable任务执行后没有返回值:Callable任务执行后可以获得返回值 2.Runnable的方法是run(),没有返回值:Callable的 ...
- Runnable和Callable 的区别
Runnable和Callable 的区别 01.Runnable接口中只有一个run()没有返回值 没有声明异常 Callable接口中只有一个call()有返回值 有声明异常 02.Calla ...
- Java线程—-Runnable和Callable的区别和联系
Java 提供了三种创建线程的方法 1.继承Thread接口 public class Thread2Thread { public static void main(String[] args) { ...
- Runnable 和 Callable的区别
Runnable 与 Callable的区别: (1)Callable规定的方法是call(),Runnable规定的方法是run(). (2)Callable的任务执行后可返回值,而Runnable ...
- 说一下 runnable 和 callable 有什么区别?(未完成)
说一下 runnable 和 callable 有什么区别?(未完成)
随机推荐
- 关于SQL 导出脚本失败 及SQL 的重装
说点题外话 最近跳到一家新公司 薪资比较客观 但是技术可能不太尽如人意 而且对.Net方向的开发好像不是很友好 自己也不知道该怎么办 一个人大老远跑这边来 附近也没有什么.net的公司和职位 房子租 ...
- 云笔记项目-Spring事务学习-传播NESTED
接下来测试事务传播属性NESTED Service层 Service层方法事务传播属性都设置为NESTED. LayerT层代码 package LayerT; import javax.annota ...
- Google开源软负载seesaw
https://github.com/google/seesaw ------------------------ 在分布式系统中,负载均衡是非常重要的环节,通过负载均衡将请求派发到网络中的一个或多个 ...
- git命令行获取某分支代码
参考https://www.cnblogs.com/nylcy/p/6569284.html git clone -b branch1 http://xxx.xx.xxx... git clone - ...
- springboot+dubbo提示超时
在消费方工程的application.properties里面加上dubbo.consumer.timeout=30000.
- jquery花式图片库——jqFancyTransitions
http://www.html580.com/3785 https://yq.aliyun.com/ziliao/4390 使用方法调用插件js文件: <script src="js/ ...
- 高性能mysql 事务笔记
事务的四大特性原子性.一致性.隔离性.持久性, 事务隔离的四大隔离级别: READ UNCOMMITTED(未提交读), 在 read uncommitted级别,事务中的修改,及时没有提交,对其他事 ...
- 20175314 《Java程序设计》第八周学习总结
20175314 <Java程序设计>第八周学习总结 教材学习内容总结 安利一个非常实用的图片处理工具:图片工厂,它具有非常强大的图片批处理能力,比如加水印.降低画质.命名等,不仅如此它还 ...
- 20175234 2018-2019-2 《Java程序设计》第八周学习总结
目录 20175234 2018-2019-2 <Java程序设计>第八周学习总结 教材学习内容总结 15.1泛型 15.2链表 15.3堆栈 15.4散列映射 15.5树集 15.6树映 ...
- js项目练习第一课
控制div属性 <style> .c1 { width:200px; height:200px; background-color: #000; display: block; margi ...