Java之Callable和Runnable
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相关推荐
- Java并发编程—说说Runnable与Callable
原文作者:每天一点 原文地址:说说Runnable与Callable 首先,我们先看看使用Callable创建线程与使用Runable的区别: import java.util.concurrent. ...
- Java多线程学习三十二:Callable 和 Runnable 的不同?
为什么需要 Callable?Runnable 的缺陷 先来看一下,为什么需要 Callable?要想回答这个问题,我们先来看看现有的 Runnable 有哪些缺陷? 不能返回一个返回值 第一个缺陷, ...
- Java多线程-Callable和Future
Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需 ...
- 四十九、深入了解两个并发接口Callable和Runnable的区别
@Author:Runsen @Date:2020/6/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...
- Java多线程Callable接口
Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如 ...
- Java多线程-Thread、Runnable、Executor
线程分为五个阶段:创建.就绪.运行.阻塞.终止. 创建:新建一个线程对象,如Thread thd=new Thread(). 就绪:创建了线程对象后,调用了线程的start()方法(此时线程只是进入了 ...
- Java中Callable和Future
Java中为什么需要Callable 在java中有两种创建线程的方法: 一种是继承Thread类,重写run方法: public class TestMain {public static void ...
- Callable和Runnable的区别(面试常考),看完就懂
Callable和Runnable的区别(面试常考),看完就懂 Callable 接口 测试类 Runnable 接口 测试类 两者的区别 补充Executor框架 Callable 接口 publi ...
- java中Thread与Runnable的区别
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...
最新文章
- 京东一面:说说ThreadLocal的使用场景及使用方式
- 关于oracle分组后组外排序的问题
- phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志
- python怎样填充颜色_python – 使用颜色填充Tkinter画布对象之间的空间
- 疫情,降薪,跳槽工作难找,任务重加班多,程序员的出路在何方?
- 快速创建精彩的Flash游戏(一) Flash2D游戏引擎简介
- Ubuntu安装最新版nodejs
- delegate(转)
- Arduino测量误差数据的处理——莱特、格拉布斯准则剔除异常数据
- 查看Linux服务器内存情况
- linux系统优化步骤,优化Linux系统的12个步骤
- 一个游戏账号竟卖到7.5万元!
- java基础知识(day03)
- -R语言中%in%函数的用法
- 简易学生信息管理系统(Python版)
- 【PowerDesigner】一款超好用的E-R图工具,快速构建出高质量的数据库结构,提高开发效率和代码质量
- 带你去华强北拼装小米手机
- 计算机组装与维护作文,智慧职教计算机组装与维护答案
- 小程序开发 APPid怎么找
- php视频观看20秒设置,实现视频定秒试看功能,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
热门文章
- EF Core使用Simple Logging输出日志
- .NET 6 预览版 7 Released
- 自由、开源及其敌人 —— RMS事件簿
- 一日一技:在Ocelot网关中实现IdentityServer4密码模式(password)
- .NET5.0 Preview 8 开箱教程
- Blazor WebAssembly 3.2.0 已在塔架就位 将发射新一代前端SPA框架
- 程序员过关斩将--redis做消息队列,香吗?
- 简化MVVM属性设置和修改 - .NET CORE(C#) WPF开发
- 重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
- 精彩回放 | 玩转 VS Code 物联网开发