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.


 

企业级 Agent 在 K8s 上的运行模型 Kubernetes├── Agent Orchestrator(控制面)├── Agent Runtime Pods(执行面)├── Graph DSL(流程层)├── Tool Services(能力层)K8s(调度)+ Graph(流程)+ Agent(决策)+ Tool(执行)+ Guard(治理) 阅读详情

相关推荐

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4544

转载:深入学习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

基于STM32的PID恒温恒湿控制系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了基于双路PID算法的恒温恒湿闭环控制系统,覆盖高精度温湿度采集、双模式控制、参数在线配置、异常安全保护、掉电记忆等全功能,全程采用无跳步保姆式教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 346

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

软考中级-软件设计师 知识点整理(一篇就过了 建议收藏)

软考中级-软件设计师上午题知识点总结

片言可决讼,半纸能缚龙 17万+

Captcha must be filled out,解决Kaggle新用户注册无法弹出验证提示的问题

Captcha must be filled out

weixin_46713695的博客 5万+

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

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

huangchunxia_1的博客 1万+

1.2 amdgpu_bo的设计分析 — gem层和ttm层

本文分析了AMD KFD的BO设计架构,重点介绍了DRM子系统中缓冲对象的多层继承关系。文章首先展示了核心继承层次图,包括DRM通用层(drm_gem_object)、TTM内存管理层(ttm_buffer_object)、AMD驱动层(amdgpu_bo)和KFD计算层(kgd_mem)。随后详细解析了drm_gem_object结构体的关键功能,包括用户空间接口管理、内存映射支持、引用计数机制以及DMA-BUF导入/导出功能。

图形/计算GPU的驱动与虚拟化技术分享园地 2548

Callable获取返回值

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

sinat_24296421的博客 7695

《Zephyr OS 入门与实战》第15章:LoRaWAN 集成

【代码】《Zephyr OS 入门与实战》第15章:LoRaWAN 集成。

2301_79143213的博客 610

[STC32G144K246入门第一步]点亮LED

STC32G144K246是一款高性能32位8051单片机,集成了丰富外设资源,适用于工业控制和复杂算法处理。该芯片支持双模式内核,内置硬件加速器,提供246KB Flash和144KB SRAM存储空间。文章详细介绍了开发环境搭建步骤、寄存器配置方法,并给出了LED驱动示例代码,通过推挽输出控制P42口实现闪烁效果。虽然开发环境相比ARM存在不足,但通过合理配置仍可满足项目需求。该教程为开发者快速上手STC32G144K246提供了实用参考。

sinat_58149788的博客 799

Callable异步原理简析

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

轻风无言的博客 2万+

MIKE水动力笔记8_冷启动与热启动

在【MIKE水动力笔记5_建立水动力模型】中,讲到【Step 2 设置模型参数】中的【Initial Conditions】时,提到了冷启动与热启动。本博文就详细讲解何为冷启动、热启动,并通过一个案例具体分析两者不同。...

晏长街的博客 6568

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

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

weixin_30624835的博客 1643

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

线程创建方式之实现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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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(),调用...

方亚军的博客 2244

【 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多线程-继承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、付费专栏及课程。

余额充值