Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >多线程之创建线程的方式之一:实现Callable接口(三)

多线程之创建线程的方式之一:实现Callable接口(三)

作者头像
程序猿小亮
发布于 2021-01-29 07:24:03
发布于 2021-01-29 07:24:03
34700
代码可运行
举报
运行总次数:0
代码可运行

对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说。这篇博文我们介绍第三种:实现Callable接口。

文章目录

Callable接口

接口定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@FunctionalInterface
public interface Callable<V> {
    V call() throws Exception;
}

从Callable的定义可以看出:

  1. Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的,方法可以有返回值,并且可以抛出异常。但是Runnable不行。
  2. Callable需要依赖FutureTask,用于接收运算结果。一个产生结果,一个拿到结果。FutureTask是Future接口的实现类,也可以用作闭锁。

简单实例

计算0到100相加,返回结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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接口其实特别简单,在多线程环境中,返回结果。

下篇博文,我们研究如何解决多线程安全问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/03/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
5.JUC线程高级-创建线程的第三种方式实现 Callable接口
执行Callable方式,需要FutureTask 实现类的支持,用于接收运算结果。FutureTask 是 Future 接口的实现类。
用户1212940
2022/04/13
1780
5.JUC线程高级-创建线程的第三种方式实现 Callable接口
6.实现 Callable 接口
6.实现 Callable 接口 前言 本篇章来介绍一下创建线程的第三种方式,其中创建线程一共有四种方式: 继承 Thread 类 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式 那么下面我们来介绍一下 实现 Callable 接口的方式。 Callable 接口 - Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口 - Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程
Devops海洋的渔夫
2022/03/23
6060
6.实现 Callable 接口
java 多线程Thread、Runnable和Callable的区别和用法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126573.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/23
2540
Java多线程实现的几种方式
多进程是计算机中的一个重要概念,通常一个任务称为一个进程,比如浏览网页、播放音乐都是一个进程。
benym
2022/07/14
3810
进程和线程
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。 线程是比进程更小的执行单位,它是在一个进程中独立的控制流,一个进程可以启动多个线程,每条线程并行执行不同的任务。
joshua317
2021/09/28
6900
【并发那些事】创建线程的三种方式
创建线程可以说是并发知识中最基础的操作了,JDK 提供的创建线程的方式,如果不包括通过线程池的话,目前有三种形式,它们分别是通过继承 Thread 类,通过实现 Runable 接口,通过 FutureTask。如下图所示
KIWI
2020/04/08
3510
创建线程都有哪些方式?— Callable篇
相信大家回答这个问题没什么难度吧?通常问完创建方式,那么接下来就是问「1、2」跟「3」创建方式的不同了,只要说出「3」有返回值基本这个问题就过了,不管是出于好奇还是疑惑,我们今天来会会这个Callable。
niceyoo
2020/07/26
8060
多线程之jdk 5.0新增的两种创建方式
创建线程的方式三:实现callable接口 -------jdk5.0新增 返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。 Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。 接口 Executor 执行已提交的 Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 new Thread(new(RunnableTask())).start():
暴躁的程序猿
2022/03/24
2080
多线程之jdk 5.0新增的两种创建方式
JUC前言:一、volatile关键字与内存可见性二、原子性三、锁分段机制四、闭锁五、创建线程的方式 --- 实现Callable接口六、Lock同步锁七、等待唤醒机制八、ReadWriterLock
在Java中,线程部分是一个重点,本篇文章说的JUC也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。下面一起来看看它怎么使用。
贪挽懒月
2018/12/27
7810
详解多线程启动涉及的知识点
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易地实现资源共享。实现Runnable接口比继承Thread类所具有的优势:
BUG弄潮儿
2022/06/30
2060
详解多线程启动涉及的知识点
Java面试之创建线程的三种方法及其区别
然后,调用Thread类的构造函数创建Thread实例并调用start()方法启动线程:
leon公众号精选
2022/04/27
2830
Java面试之创建线程的三种方法及其区别
JAVA代码实现多线程的方式总结
1) 第一种方式: a. 类 继承 java.lang.Thread类,同时覆盖run方法 注意:线程任务定义在run方法中 b. 创建线程对象: MyThread t = new MyThread(); c. 开启线程:利用 start开启线程,jvm执行线程时会自动的 调用run
猫头虎
2024/04/07
1580
创建线程的三种方式
1)继承Thread类,重写run方法 2)实现Runnable接口创建线程 3)使用Callable和Future创建线程
名字是乱打的
2022/05/13
2700
Java多线程之Callable和Future
本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。
Java团长
2018/08/06
6370
【多线程】JUC的常见类,Callable接口,ReentranLock,Semaphore,CountDownLatch
所以创建一个线程,希望它给你返回一个结果,那么使用 Callable 更加方便一些
椰椰椰耶
2024/09/20
890
【多线程】JUC的常见类,Callable接口,ReentranLock,Semaphore,CountDownLatch
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
终有救赎
2023/10/16
2110
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
多线程(一)-两种创建线程的方式+实现Callable接口方式
​ 继承Thread必须重写run方法,(具体业务执行方法,需要执行的业务方法,定义在此方法中),注意此方法是线程启动后线程自动调用的;
化羽羽
2022/10/28
4450
Java并发编程之Future和FutureTask
搞过Java或者客户端Android开发的都知道,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。不过,这2种方式都有一个缺陷,就是在执行完任务之后无法获取执行结果。
xiangzhihong
2022/11/30
3780
JAVA多线程高并发学习笔记(三)——Callable、Future和FutureTask
为什么要是用Callable和Future Runnable的局限性 Executor采用Runnable作为基本的表达形式,虽然Runnable的run方法能够写入日志,写入文件,写入数据库等操作,但是它不能返回一个值,或者抛出一个受检查的异常,有些需要返回值的需求就不能满足了。 能够取消 Executor中的任务有四个状态:创建,提交,开始和完成。如果说有些任务执行时间比较长,希望能够取消该任务,Executor中的任务在未开始前是可以取消的,如果已经开始了,只能通过中断的方式来取消。如果使用Calla
Janti
2018/04/10
9620
JAVA多线程高并发学习笔记(三)——Callable、Future和FutureTask
【80期】说出Java创建线程的三种方式及对比
上述代码中Thread.currentThread()方法返回当前正在执行的线程对象。GetName()方法返回调用该方法的线程的名字。
良月柒
2020/11/06
3880
【80期】说出Java创建线程的三种方式及对比
推荐阅读
相关推荐
5.JUC线程高级-创建线程的第三种方式实现 Callable接口
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验