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.


 

Ubuntu系统下USB无线网卡无法识别的解决方案 Realtek的USB设备可能是无线网卡、有线网卡、读卡器等,系统仅知道“这是Realtek的USB设备”,但不知道“如何将其作为无线网卡驱动”。通过以上步骤,RTL8812AU 芯片的 Edimax 无线网卡应能被 Ubuntu 识别并正常工作。Realtek等品牌的无线网卡可能被系统简单识别为"USB设备",但未匹配到对应的无线驱动,导致设备无法发挥网络功能。是系统识别了USB设备,却未正确加载无线网卡驱动。(前4位是厂商ID,后4位是产品ID),显示设备已识别,但网络管理工具无反应, 阅读详情

相关推荐

【FLINK+Kerberos+kafka】在华为云上 bootstrap.server使用IP的GSS initiate failed 问题处理

目前互联网上所有的资料显示都是说没有正确设置KDC之类的,但本博主实际通过java代码低版本 如使用kafka-client 0.11.0 ,2.4.0等版本手动创建kafkaconfig 或者使用华为云的LoginUtils类 都能够正常链接,所以应该是高版本添加了相关配置,或者flink在subtask 创建kafkaAdminClient时 丢弃或使用了默认的一些配置行为,导致了客户端和kdc验证之间出现了principal 不一致导致验证失败。client.dns.lookup配置项作用。

honghanyue1791的博客 574

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

原始链接:https://blog.youkuaiyun.com/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

第二十届全国大学生智能汽车竞赛极速光电组:MicroPython与恩智浦RT1021的硬件编程实战指南

本文为参加第二十届全国大学生智能汽车竞赛极速光电组的同学提供了一份详尽的MicroPython与恩智浦RT1021硬件编程实战指南。文章深入剖析了选择MicroPython与RT1021这对组合的优势,详细讲解了从开发环境搭建、基础硬件控制(如GPIO、PWM、编码器、CCD)到系统集成(平衡控制、循迹算法)与多任务调试的全过程,旨在帮助参赛者降低嵌入式开发门槛,高效备赛。

wdx0123456的博客 843

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

App渗透 - 人脸识别登录绕过

一、APP抓包和逆向破解加密算法打开APP是一个登录框抓包后发现参数被加密了使用Jadx脱源码发现,并没有加壳也没有混淆,运气很好根据经验,先搜索Encrypt、Decrypt等关键字,发现在Common.js中有一个encryptData函数定位过去,一套加解密算法都写好了放在这放到浏览器console里面调试,果然没错二、寻找注入点首先测试了一下注入明文:{"userName":"TEST'...

渗透测试研究中心 2826

macOS安装Cplex+yalmip

macOS安装Cplex+yalmip

DS 4248

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

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

huangchunxia_1的博客 1万+

深度学习之常用算子介绍

打开 onnx 模型图,可以看到它是一个有向无环图。除了 Input、Output ,其他都是算子(是操作,而不是节点)在ONNX(Open Neural Network Exchange)模型中,除了输入和输出,其他都是算子(Operations)。算子是表示神经网络模型中的不同操作或层的元素。一个ONNX模型由一系列算子组成,通过连接这些算子来定义模型的计算流程。

ueke1的博客 8459

Callable获取返回值

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

sinat_24296421的博客 7695

LoRa学习:LoRa通信调制解调的实现原理与性能

LoRa学习:LoRa调制解调原理与性能 1、LoRa调制解调器原理 LoRa调制解调器采用专利扩频调制和前向纠错技术。与传统的FSK、OOK调制技术相比,LoRa扩大了无线通讯链路的覆盖范围(实现了远距离无线传输),提高了链路的鲁棒性。。 开发人员可调整扩频因子和纠错率这两个参数,从而平衡通讯时的带宽占用、通信速率、空中包的存活时间、以及抗干扰性等。。 LoRa调制解调器...

HowieXue 薛永浩的博客 3万+

NVIDIA Isaac Sim 入门教程(二)

Omniverse Isaac Sim 的工作空间非常容易自定义。调整用户界面的大小、停靠、取消停靠、添加和移除面板都非常容易。进入顶部菜单栏,单击下拉菜单最下方的窗口 > 视口 > 视口 2(现在工作区中应该会出现一个名为 "视口 2 "的新视口。如果您想创建更多的视口,请按照相机检查器扩展进行操作。单击并拖动视口 2 的顶部标题以激活停靠部件。拖放到原始视口的右侧,将两个视口并排放置。单击并向左拖动视口 2 的左侧,使视口大小相等。

机器人控制与仿真应用 6545

Callable异步原理简析

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

轻风无言的博客 2万+

SAP MD81创建客户独立需求简介

正常我们用的最多的计划独立需求都是使用的是MD61 ,今天我们说下SAP的另外的一个标准功能客户独立需求MD81。虽然SAP给这个TCODE的描述是客户独立需求,但是实际是没有地方去关联对应的客户信息的。可以看到根据客户需求产生了对应的计划订单,我们创建的时候选择的KSV是按库存生产的,所以转换的时候生产订单也按单生产的。上面填写的这些字段的信息是不是和我们销售订单里面的字段的信息很相似。1)填写交货日期,可以选择按月 ,按日,按周等类型选择对应的日期。保存后会显示对应的客户独立需求的号码,如下图。

我小时候很黑的博客 2904

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

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

weixin_30624835的博客 1643

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

余额充值