1 接口定义

1) Callable接口

public interface Callable<V> {V call() throws Exception;
}

2) Runnable接口

public interface Runnable {public abstract void run();
}

2 不同点和相同点

1)相同点

都是接口,都可编写多线程程序,都是调用Thread.start()启动线程

2)不同点

Callable可以返回执行结果,是个泛型,与Future、FutureTask配合可以通过FutureTask.get()获取异步执行的结果,但是Runnable不可以。

Callable里面有取消这个任务,而且异常可以外抛,但是Runnable异常只能内部run消化。

FutureTask.get()得到异步执行的结果,此方法会阻塞主进程的继续往下执行。

3 Callable测试用例

import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;public class TestCallableAndFuture {public static void main(String[] args) {//构建CallableCallable<String> callable = new Callable<String>() {@Overridepublic String call() throws Exception {Thread.sleep(2000);return "chenyu callable finish";}};//构建FutureTaskFutureTask<String> futureTask = new FutureTask<>(callable);//运行线程new Thread(futureTask).start();try {System.out.println("chenyu begin");System.out.println(futureTask.isDone());//futureTask.cancel(true);if (!futureTask.isCancelled()) {System.out.println(futureTask.get());System.out.println(futureTask.isDone());System.out.println("chenyu end");} else {System.out.println("the thread is cancel");}} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}
}

4 运行结果

如果注释掉// futureTask.cancel(true)运行结果如下

chenyu begin
false
chenyu callable finish
true
chenyu end

如果不注释掉futureTask.cancel(true)运行结果如下

chenyu begin
false
the thread is cancel

Java之Callable和Runnable相关推荐

  1. Java并发编程—说说Runnable与Callable

    原文作者:每天一点 原文地址:说说Runnable与Callable 首先,我们先看看使用Callable创建线程与使用Runable的区别: import java.util.concurrent. ...

  2. Java多线程学习三十二:Callable 和 Runnable 的不同?

    为什么需要 Callable?Runnable 的缺陷 先来看一下,为什么需要 Callable?要想回答这个问题,我们先来看看现有的 Runnable 有哪些缺陷? 不能返回一个返回值 第一个缺陷, ...

  3. Java多线程-Callable和Future

    Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需 ...

  4. 四十九、深入了解两个并发接口Callable和Runnable的区别

    @Author:Runsen @Date:2020/6/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  5. Java多线程Callable接口

    Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.  这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果.  如 ...

  6. Java多线程-Thread、Runnable、Executor

    线程分为五个阶段:创建.就绪.运行.阻塞.终止. 创建:新建一个线程对象,如Thread thd=new Thread(). 就绪:创建了线程对象后,调用了线程的start()方法(此时线程只是进入了 ...

  7. Java中Callable和Future

    Java中为什么需要Callable 在java中有两种创建线程的方法: 一种是继承Thread类,重写run方法: public class TestMain {public static void ...

  8. Callable和Runnable的区别(面试常考),看完就懂

    Callable和Runnable的区别(面试常考),看完就懂 Callable 接口 测试类 Runnable 接口 测试类 两者的区别 补充Executor框架 Callable 接口 publi ...

  9. java中Thread与Runnable的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...

最新文章

  1. 京东一面:说说ThreadLocal的使用场景及使用方式
  2. 关于oracle分组后组外排序的问题
  3. phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志
  4. python怎样填充颜色_python – 使用颜色填充Tkinter画布对象之间的空间
  5. 疫情,降薪,跳槽工作难找,任务重加班多,程序员的出路在何方?
  6. 快速创建精彩的Flash游戏(一) Flash2D游戏引擎简介
  7. Ubuntu安装最新版nodejs
  8. delegate(转)
  9. Arduino测量误差数据的处理——莱特、格拉布斯准则剔除异常数据
  10. 查看Linux服务器内存情况
  11. linux系统优化步骤,优化Linux系统的12个步骤
  12. 一个游戏账号竟卖到7.5万元!
  13. java基础知识(day03)
  14. -R语言中%in%函数的用法
  15. 简易学生信息管理系统(Python版)
  16. 【PowerDesigner】一款超好用的E-R图工具,快速构建出高质量的数据库结构,提高开发效率和代码质量
  17. 带你去华强北拼装小米手机
  18. 计算机组装与维护作文,智慧职教计算机组装与维护答案
  19. 小程序开发 APPid怎么找
  20. php视频观看20秒设置,实现视频定秒试看功能,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...

热门文章

  1. EF Core使用Simple Logging输出日志
  2. .NET 6 预览版 7 Released
  3. 自由、开源及其敌人 —— RMS事件簿
  4. 一日一技:在Ocelot网关中实现IdentityServer4密码模式(password)
  5. .NET5.0 Preview 8 开箱教程
  6. Blazor WebAssembly 3.2.0 已在塔架就位 将发射新一代前端SPA框架
  7. 程序员过关斩将--redis做消息队列,香吗?
  8. 简化MVVM属性设置和修改 - .NET CORE(C#) WPF开发
  9. 重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
  10. 精彩回放 | 玩转 VS Code 物联网开发