Java多线程-实现Callable接口的call()方法,示例

Java创建多线程的3种方法:继承Thread类、实现Runnable接口、实现Callable接口 线程(Thread)‌是程序的执行单元,一个进程内可包含多个线程。利用多核 CPU 并行执行任务(如并发计算、批量处理)。主线程不阻塞(如 GUI 界面后台加载数据)。共享进程资源(内存、文件句柄),减少上下文切换开销。Java 多线程通过‌并发执行‌提升程序效率,核心实现方式包括:Thread、Runnable 和 Callable,需注意‌线程安全‌问题(同步机制)。实际开发中优先使用‌线程池‌和‌并发工具类‌(如 JUC 包)简化编码并优化性能。 阅读详情

    创建步骤,首先实现Callable接口的call()方法并指定返回值;然后创建实现类实例;FutureTask类使用Callable实现类的实例通过FutureTask的单参数构造器创建FutureTask的实例;通过Thread类的构造器创建Thread类实例,并执行start方法,启动线程;最后通过FutureTask实例的get()方法阻塞拿到Callable实现类的call方法的返回值。

    示例如下,

public class CallableTest implements Callable {
    @Override
    public String call() throws Exception {
        for (int i = 0; i < 5 ; i++) {
            Thread.sleep(Math.round(Math.random()*1000));  //线程随机时长休眠
            System.out.println(Thread.currentThread().getName()+" "+i);
        }
        return Thread.currentThread().getName()+" is completed."; // 返回值
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CallableTest callableTest1 = new CallableTest();
        CallableTest callableTest2 = new CallableTest();
        FutureTask<String> futureTask1 = new FutureTask<String>(callableTest1);
        FutureTask<String> futureTask2 = new FutureTask<String>(callableTest2);
        new Thread(futureTask1,"Thread-1: ").start();
        new Thread(futureTask2,"Thread-2: ").start();
        System.out.println(futureTask1.get());
        System.out.println(futureTask2.get());
    }
}

执行结果,


Thread-2:  0
Thread-2:  1
Thread-1:  0
Thread-2:  2
Thread-1:  1
Thread-2:  3
Thread-2:  4
Thread-1:  2
Thread-1:  3
Thread-1:  4
Thread-1:  is completed.
Thread-2:  is completed.


 

手把手教你用STM32CubeMX和HAL库驱动MT6835磁编码器(SPI读取21位角度) 本文详细介绍了如何使用STM32CubeMX和HAL库驱动MT6835磁编码器,通过SPI接口读取21位高精度角度数据。从硬件准备、CubeMX配置到HAL库驱动实现与优化,提供了完整的实战指南,帮助开发者快速掌握磁编码器的应用技巧,适用于机器人关节和精密仪器等高精度场景。 阅读详情

相关推荐

手把手教你自制Type-C OTG转换器(附电路图及避坑指南)

本文详细指导如何自制Type-C OTG转换器,包括核心电路设计、元器件选型及焊接技巧,特别强调硬件检测电路的关键作用。通过实测数据和避坑指南,帮助开发者解决兼容性问题,实现高效数据传输。

weixin_27038245的博客 714

转载:深入学习java源码之Callable.call()与Future.get()

原始链接:https://blog.csdn.net/qq_35029061/article/details/86750369 深入学习java源码之Callable.call()与Future.get() wespten 2019-02-03 08:07:50 7904 收藏 8 分类专栏: Java源码 文章标签: 深入学习java源码之Callable.call()与Fut 版权 深入学习java源码之Callable.call()与Future.get() Callable和Futur..

黄道婆的专栏 773

HFSS新手避坑指南:手把手教你用FR4基板仿真威尔金森功分器(附参数优化技巧)

本文详细介绍了使用HFSS仿真FR4基板威尔金森功分器的12个关键细节,包括介质基板设置、微带线建模、隔离电阻设置等实战技巧。特别针对微波技术中的常见问题,提供了参数优化和结果解读的实用方法,帮助新手快速掌握HFSS仿真技能。

weixin_27310417的博客 227

Callable接口中的call方法及返回对象Future 和CountDownLatch计数器的使用

jdk1.5中的实现Callable接口中实现call方法创建线程与之前Thread类中或Runnable接口中的重写/实现run方法的不同 首选call方法最大不同就是增加了抛出异常及其返回值的功能。 Callable接口与Future, 多线程并发情况下利用Future对象接收返回值,上代码。 import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concur

taiguolaotu的博客 1902

【异常】XXL-JOB提示异常ERROR com.xxl.job.core.util.XxlJobRemotingUtil - connect timed out

打开XXL-JOB的ELK,发现一堆报错。

奶爸的编程之路,也就一周冷个三天 2048

【面试系列】数据工程师高频面试题及详细解答

本文针对数据工程师岗位,提供了详尽的面试题库和解答,分为初级、中级和高级三个层次。初级面试题主要涉及基本的数据处理和ETL工具的使用,如SQL查询、数据清洗和基本的数据建模。中级面试题重点考察数据管道设计、数据库优化和大数据平台的应用。高级面试题则深入探讨高级数据处理技术、分布式系统架构和数据湖的实现。通过这些问题和解答,候选人可以全面了解数据工程师岗位所需的技能,帮助其更好地准备面试。常考知识点总结部分则系统归纳了数据工程师岗位的关键技能领域。

在路上的专栏 2376

实现Callable接口,什么时候调用call()方法

最近,项目中经常接触线程,特别是在推送MQ的时候,都是使用线程来执行操作。在这里,用一个简单的例子来整理一个很简单的使用方法。代码如下: public class TestThread {     public static void main(String[] args) {         //使用main方法模拟Callable的call()方法的调用         CallableTe...

huangchunxia_1的博客 1万+

PCL 建筑物点云立面和平面分割提取【2025最新版】

在建筑物点云中,立面点和平面点的法向量存在明显的差异,根据法向量在Z方向的分量设置相应得阈值即可实现立面点与平面点的分割。

点云侠的博客 1962

Callable获取返回值

最近在写一个统计任务,恩,也不算最近了,过去一个多月了都。 任务要求,每周日凌晨之前统计用户总数及增长量,因为是分库分表的,统计维度要求到库级别和表级别。 大致实现思路,滚动时,每个表开一个线程做COUNT操作,因为要统计库级别的数据,所以需要等到所有线程结束后拿到所有线程的返回值,进行累加。(至于这里为什么滚动表的时候都要开一个线程,其实不开线程也OK的,但是,这种线程获取返回值的还没有用过...

sinat_24296421的博客 7695

CloudCompare二次开发(1)——获取指定高程的所有点

使用CloudCompare插件实现获取点云数据中指定高程的所有点。

点云侠的博客 4735

YOLOv11涨点改进 | 首发全网创新、主干改进篇 | AAAI 2026 | PartialNet 主干让 YOLOv11 更加强大!引入部分通道机制 和 部分注意力卷积,全方面提升了模型的性能

本文提出PartialNet主干网络改进YOLOv11的方法,通过部分通道机制(PCM)和部分注意力卷积(PATConv)提升模型效率。PartialNet将特征图通道拆分并应用不同操作,显著减少计算量和内存占用。主要创新包括:1)部分通道机制实现计算优化;2)三种注意力模块(PATch/PATsp/PATsf)增强特征提取;3)动态部分卷积(DPConv)自适应调整计算复杂度。文章详细提供了代码实现和YOLOv11集成方法。

Ai缝合怪、助力小伙伴高效发论文 268

Callable异步原理简析

异步执行,应该不会陌生,那么在java中是怎么用的呢?又是如何实现的?下面我们循序渐进,慢慢分析。

轻风无言的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

call方法 java_Java多线程-实现Callable接口的call()方法,示例

创建步骤,首先实现Callable接口的call()方法并指定返回值;然后创建实现类实例;FutureTask类使用Callable实现类的实例通过FutureTask的单参数构造器创建FutureTask的实例;通过Thread类的构造器创建Thread类实例,并执行start方法,启动线程;最后通过FutureTask实例的get()方法阻塞拿到Callable实现类的call方法的返回值。示...

weixin_30624835的博客 1643

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

线程创建方式之实现Callable接口

package com.java.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** 实现Callable接口 @author jack @create 2019-07-12...

菜鸟的自我素养的博客 293

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java基础语法78-创建多线程方式三--实现Callable接口

Java基础语法78-创建多线程方式三–实现Callable接口 创建线程的方式三:实现Callable接口。 — JDK 5.0新增 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? call()可以有返回值的。 call()可以抛出异常,被外面的操作捕获,获取异常的信息 Callable是支持泛型的 //1.创建一个实现Callable的实现类 class NumThread implements Callable{ //2.实现call方法,将

A1066223647的博客 255

java的多线程创建方法与其内部如何实现的?

多线程的创建与使用方式,Thread类、Runnable接口以及Callable接口等等,以及如何实现

Gedulding的博客 702

java学习----多线程Callable接口

javaCallable接口 1.基本介绍 简单的介绍一下会用到的两个新的接口,用Callable的时候,一般我们是把任务交给线程池去执行,而不是直接交给线程。 1.1Callbale接口 public interface Callable<V>{ public V call() throws Exception; } Callable可调用对象 JDK5假如,与Runnable接口类似,实现后代表一个线程任务。 具有泛型返回值,可以声明异常。 1.2Future接口介绍 用于异步接收E

qq_42704970的博客 1258

java 多线程 多线程概述及其三种创建方式 线程的常用方法

java 多线程 多线程概述及其三种创建方式 创建方式一 继承Thread类 创建方式二 实现Runnable接口 创建方式三 利用Callable接口、FutureTask类来实现 线程的常用方法

weixin_43739821的博客 265

实现多线程的三种方法

实现多线程的三种方法 1.继承Thread 测试代码如下: //创建线程方式一:继承Thread类,重写run()方法,调用start开启线程 //注意:线程开启不一定立即执行,由CPU调度执行 public class TestThread1 extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Threa

ggghhu的博客 210

详述Java实现Callable接口实现多线程的方式

公司项目忙的晕头转向,终于有时间可以看点自己想看的东西了。在这里把最近学习的实现Callable接口实现多线程的方式做一个总结: 首先我们都知道,在Java中最常见的是继承Thread类和实现Runnable接口来实现多线程( 这里我推荐采用实现接口的方式来实现多线程,原因有两点: 1、Java的设计是单继承的设计,如果采用继承Thread的方式实现多线程,则不能继承其他的类。 2、采用接...

weixin_42606135的博客 2万+

多线程——实现Callable接口

前两篇博客(多线程——继承Thread类,多线程——实现Runnable接口 )介绍了java使用线程的两种方法,这篇博客继续介绍第三种方法——实现Callable接口。   先说一下Runnable和Callable的区别: 1、Callable规定的方法是call(),Runnable规定的方法是run(). 2、Callable的任务执行后可返回值,而Runnable的任务是不能

梦想起飞的地方,必须用心去经营 4779

Callable接口实现多线程的方式

通过Callable接口实现多线程 实现Callable重写call方法 实现Callable和实现Runnable类似,但是功能更强大,具体表现在 可以在任务结束后提供一个返回值,Runnable不行 call方法可以抛出异常,Runnable的run方法不行 可以通过运行Callable得到的Fulture对象监听目标线程调用call方法的结果,得到返回值,(fulture.get(),调用...

方亚军的博客 2245

【 java 多线程】创建多线程的方式三:使用 Callable 接口创建多线程

创建多线程的方式其实有四种,前面我们写过了最常见的Thread 和 Runnable实现多线程,这节我将总结一下第三种方式,使用Callable接口创建多线程!

阿牛的博客 2406

Java多线程实现之Callable接口深度解析

Runnable接口是我们在Java中实现多线程任务的常用方式,然而Runnable的run()方法没有返回值,这在需要获取线程执行结果的场景下显得力不从心。Java 5引入的Callable接口和Future机制解决了这个问题,允许线程任务返回结果并处理异常

aa_hdkf_vg的博客 1121

通过Callable实现多线程

通过Callable实现多线程 优点:可以获取返回值,可以抛出异常(最突出的两个优点) Callable 和 Future接口 Callable接口是类似于Runnable的接口,实现Callable接口的类和实现Runnable接口的类都是可被其他线程执行的任务。 Callable和Runnable有几点不同: (1)Callable规定的方法是call(),Runnable规定的方法

我的专属空间u011151444 2643

java callable 详解_详解Java Callable接口实现多线程的方式

在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求io,cup等资源。因为线程run方法没有返回值,如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从java 1.5开始,就提供了Callable...

weixin_31749299的博客 6397
上一篇: Java多线程-继承Thread类,示例
下一篇: Spring 中@NonNull、@NonNullApi、@NonNullFields以及@Nullable注解及其示例
小鸡炖蘑菇Plus版
博客等级 码龄10年 10粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值