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.


 

TBtools的序列提取步骤 本教程详细介绍了如何使用TBtools软件从原来的FASTA序列中提取特定的DNA序列。 阅读详情

相关推荐

从机械臂示教到厨房做饭:ACT模仿学习如何让机器人更“人性化”?

本文探讨了ACT(Action Chunking with Transformers)模仿学习技术如何让机器人更“人性化”,特别是在厨房等复杂场景中的应用。通过动作分块(Action Chunking)和时态融合(Temporal Ensemble)技术,机器人能够像人类一样记忆和执行复杂任务,如烹饪。文章还分析了ACT在家庭场景中的落地挑战及其在康复医疗、柔性制造等领域的跨领域应用潜力。

weixin_30613343的博客 255

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

C++控制台实现简单的注册登录

C++控制台实现简单的注册登录 #include<iostream> #include<string> #include <vector> #include <conio.h> void Display();//调用display显示switch()界面 void Register();//注册 void Enter();//登录 using nam...

乔路非 2万+

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

手把手教你用certificate-manager修复Vcenter证书过期问题(附密码重置技巧)

本文详细解析了Vcenter证书过期引发的503服务不可用、密码错误等典型故障现象,并提供了使用certificate-manager工具进行系统性修复的完整步骤。文章重点阐述了证书体系原理、精准诊断方法,并分享了在SSO验证失败时通过vdcadmintool重置密码的关键技巧,帮助管理员快速恢复平台并建立预防性运维策略。

swift5iosmith的博客 459

【WorkBuddy专栏53】我的WB为什么变聪明了——SOUL与USER配置管理实战(上)

【WorkBuddy专栏53】我的WB为什么变聪明了——SOUL与USER配置管理实战(上)

AI人人懂 246

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

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

huangchunxia_1的博客 1万+

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

weixin_44119674的博客 440

Callable获取返回值

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

sinat_24296421的博客 7695

总结目前开源的视频生成/视频编辑大模型

随着Sora的爆火,视频生成和视频编辑受到了越来越多的关注。这篇博客总结一下目前开源的视频生成和视频编辑的大模型,并分析他们各自的优缺点,以及在自己进行科研任务或者工作中应该如何选用对应的开源模型,希望能给从事这一领域研究和使用的小伙伴们帮助。

沉迷单车的追风少年 3544

Qt5.15.2配置安卓环境

否则,将会跳转到github,你可以自行下载解压到你设置的目录中,然后Qt会自动检测到。以上所需的工具确实有些繁多,而且如果单独下载又涉及科学上网问题,版本问题十分麻烦,好在Qt Creator 4.12之后已经可以自动下载SDK工具,NDK,基础包,openssl,以及gradle等,十分省心。回到正题,无论通过在线安装的方式,安装时勾选了Android,还是编译的方式,编译时编译了Qt Android库,想要使用Qt开发安卓应用仍然需要一些其他工作,包括安装编译安卓项目需要的SDK,NDK等。

weixin_41392061的博客 979

Callable异步原理简析

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

轻风无言的博客 2万+

基于PINN求解裂纹扩展问题的优化开发

本文提出了一种基于物理信息神经网络(PINN)的裂纹扩展问题求解方法。通过将线弹性断裂力学控制方程和裂纹尖端场特性嵌入神经网络损失函数,PINN有效克服了传统有限元法在处理裂纹扩展时面临的网格重构困难、计算成本高等问题。文章详细介绍了PINN网络架构设计、裂纹尖端奇异场处理、损失函数构造以及优化策略等关键技术。数值实验表明,该方法能准确预测裂纹扩展路径和应力强度因子,且在处理复杂几何和动态扩展问题时展现出显著优势。相比传统方法,PINN具有无网格、并行计算友好等特点,为断裂力学问题提供了新的求解范式。

huanghm88的专栏 154

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

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

weixin_30624835的博客 1643

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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、付费专栏及课程。

余额充值