Java多线程callable

并发编程之Callable方法的详细解析(带小案例) 原生Thread多次执行start会抛出IllegalThreadStateException非法的线程状态异常,Callable也是。使用callable就相当于另外开了一条线程运行,调用get方法就相当于要获取这条线程的运行结果。运行结果:(可以看到 只执行了一次come in的输出,即call()这个方法的代码只运行了一次)callable多次运行,只会计算一次结果。Callable与Runnable的区别。(第三种线程实现方式) 阅读详情

继承callable接口,实现call()方法

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;

public class ThreadUtil implements Callable<List>{

    private List result = new ArrayList();

    /**
     *
     * @param cls 需要执行的类
     * @param methodName 需要执行的方法
     * @param t 方法的参数类型
     * @param object 方法参数
     */
    public ThreadUtil(Class<?> cls,String methodName,Class<?>[] t,Object... object){
        try {
            //需要执行的类
            Object obj = cls.newInstance();
            //需要执行的方法
            Method method = cls.getMethod(methodName,t);
            //执行方法
            result.add(method.invoke(obj,object));
        }  catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public List call() throws Exception {
        return result;
    }
}

 

 再写一个类,建个main()方法调用

 public static void main(String[] args) {
        try {
            List res = new ArrayList();
            String name1 = "lili";
            String name2 = "xxxx";
            String name3 = "aoao";
            Integer age = 2;
            Person p = new Person();
//            p.setContent(name1);
            p.setAge(1);
            Class[] classes = {String.class,Integer.class};
            List list = new ArrayList();
            list.add(new ThreadUtil(User.class,"say",classes,name1,age));
//            p.setContent(name2);
            list.add(new ThreadUtil(User.class,"say",classes,name2,3));
//            p.setContent(name3);
            list.add(new ThreadUtil(User.class,"say",classes,name3,4));
            ExecutorService executorService = Executors.newFixedThreadPool(10);
            List<Future<List>> futures = executorService.invokeAll(list);
            if(futures!=null && futures.size()>0){
                for (Future<List> future:futures){
                    res.addAll(future.get());
                }
            }
            executorService.shutdown();//关闭线程池
            for(Object object : res){
                System.out.println(object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

实现线程的方式(继承Thread类,实现Runnable和Callable接口)(小白教程含泪总结,读完必会!!!!) 在Java中使用Thread类表示线程,每一个线程都是Thread类的对象或者子类的对象,相当于Thread类是所有线程的父类,所有的线程对象都是一个任务,需要调度器安排序列被CPU执行,在使用了Thread类时,这些线程对象会被同时执行;在自定义类继承implements Callable接口时,需要注意后必须跟一个泛型类,该泛型类的类型可以自定义,pubic class MyCallable implements Callable<T>不能直接使用Thread类中的方法,没有返回值; 阅读详情

相关推荐

Java线程和多线程(十三)——Callable,Future,FutureTask

在Java多线程之中,Callable和Future的使用时非常广泛的。在之前的文章中,我们了解了关于Java线程池基础的一些内容,知道如何提交Runnable的任务。但是,Runnable的任务是无法有返回值,也不能抛出异常的。而有些时候,我们希望一个线程能够有一些返回值。在Java 5中,引入了java.util.concurrent.Callable接口,这个接口很类似于Runnable接口,

EthanPark的博客 6591

java 多线程之 implements Callable

线程的实现方式 java 多线程之 extends Thread java 多线程之 implements Runnable java 多线程之 implements Callable 线程池的使用 线程池简介 ThreadPoolExecutor java 线程池之 newScheduledTh......

比嗨皮兔 6137

Day470&471.Netty概述&Netty高性能架构设计 -netty

Netty概述 一、原生 NIO 存在的问题 NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。 JDK NIO

阿昌爱Java 1572

JAVA多线程实现-实现Callable接口

1. 实现Callable接口public class ImplementsCallable implements Callable&lt;Integer&gt;2. 重写接口call()方法,即线程执行内容。    @Override     public Integer call() throws Exception { Thread.currentThread().setName("Thr...

山禾园地 1123

il2cpp分析-gobal-metadata.dat解密

打开ida,把libil2cpp拖到ida中按快捷键Shift+F12等待字符串分析完后,搜索global-metadata.dat。ida中双击sub_57EE7C进入,VS code中也跳转到LoadMetadataFile函数。VSCode打开il2cpp源代码,全局搜索global-metadata.dat。工具:010Editor,IDA 7.5,Jadx,VS Code。判断加密逻辑为根据文件的长度循环读取字节码做亦或加密。双击搜索出来的结果,切记要选il2cpp目录下的。

Android_machong的博客 8025

学习笔记--在线强化学习、离线强化学习、连续强化学习的区别(4)

在连续强化学习中,状态和动作都是连续的,这意味着智能体可以采取无限数量的动作,并且状态空间是连续的,而不是离散的点。- 策略评估和模型选择:在离线学习中,如何有效地评估不同策略和模型的性能,是一个重要的研究问题。- 连续学习和迁移学习:在线学习中,学习者需要不断在不同任务和环境中学习,研究者致力于研究如何将之前学到的知识迁移到新任务中,以实现更高效的学习和决策。- 连续动作选择和优化:在连续动作空间中,智能体对动作的选择是无限的,研究者在连续强化学习中通常关注如何有效地选择连续动作,以达到最优决策策略。

hzlalb的博客 3602

创建线程的方式:3.实现Callable接口

实现Callable接口 实现Callable接口,需要返回值类型:implements Callable 重写call方法,需要抛出异常 :public Boolean call() throws Exception {} 创建目标对象 :CallableTest callableTest = new CallableTest(); 创建执行服务:ExecutorService service = Executors.newFixedThreadPool(1); 提交执行:Future

我有满天星辰的博客 473

使用同一个时钟源clki,做两个二分频时钟,得到div2_clk1和div2_clk2,这两个时钟都能跟源时钟clki同步,但是div2_clk1和div2_clk2的相位可能是相同的,也可能是反相

比如,触发器1的初始Q为0,而触发器2的初始Q为1(这可能由于芯片制造工艺的微小差异、上电过程的随机性、或没有全局复位信号导致)。这句话的意思是:虽然div2_clk1和div2_clk2都是由同一个妈妈(clki)生出来的,频率也都是妈妈的一半,但它们“起步”的时刻可能不同。所以,上面那段话是在提醒你注意这种潜在的、由分频产生的时钟相位关系的不确定性,这在异步电路设计或时钟管理中是必须考虑的关键因素。结果:div2_clk1和div2_clk2的波形完全重合,它们的上升沿和下降沿都发生在同一时刻。

m0_49540263的博客 592

java 实现Callable 多线程

Java多线程,实现Callable 多线程完成处理List分段数据

longum的博客 2637

从零构建腾讯滑块验证码破解引擎:逆向工程与实战对抗

本文深入解析腾讯滑块验证码(原天御验证码)的防护机制,包括环境感知层、行为分析层和验证决策层的核心技术。通过JSVMP虚拟机保护、轨迹验证算法和动态加密体系,腾讯验证码实现了高效的人机识别。文章还提供了安全研究实践指南,涵盖环境模拟和验证码识别方案,并探讨了防御对抗的演进趋势与合规研究建议。

rl6adventurer的博客 831

ABAP CDS 视图参数 parameter_list 详解与最佳实践:从语法、作用域到可运行范例

本文系统梳理了ABAP CDS视图的WITH PARAMETERS定义与使用。主要内容包括:1)参数声明语法及其在整条SELECT语句中的贯穿使用;2)参数在WHERE/HAVING/ON等位置的多种写法(:pname和$parameters.pname);3)参数在航空公司航线筛选等实际业务场景中的应用;4)参数与会话变量的协作策略;5)在JOIN ON、HAVING、CASE等高级用法中的实践;6)提供完整的CDS视图与ABAP程序示例,展示参数声明、使用及Open SQL传参方式。所有内容均基于SAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 373

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

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

weixin_31749299的博客 6397

第7次CCF PTA编程培训师资认证-T1 真题解析(2024下)

B。

lan_in的博客 513

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

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

weixin_42606135的博客 2万+

第六:Charles抓包-苹果手机抓包

【代码】第六:Charles抓包-苹果手机抓包。

欢迎来到本博客! 1660

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

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

java 多线程callable_JAVA语言之多线程编程之Runnable与Callable区别

本文主要向大家介绍了JAVA语言之多线程编程之Runnable与Callable区别,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。Runnable@FunctionalInterfacepublic interface Runnable { /** * When an object implementing interface Runnable is used...

weixin_32619013的博客 132

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java通过Callable实现多线程

一、Callable接口定义 从最传统的方法来讲如果要进行多线程的实现肯定依靠的就是Runnable,但是Runnable接口有一个缺点:当线程执行完毕后无法获取一个返回值,所以从JDK1.5之后就提出了一个新的线程实现接口:java.util.concurrent.Callable接口。 Callable接口源码: @FunctionalInterface public interface Callable<V> { /** * Computes a result, or

Z_LOGAN的博客 585

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

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

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

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

Java多线程之Callable、Future和FutureTask

Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable、Future和FutureTask 我们学习java基础的时候,知道创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行...

努力努力再努力L 256

Java多线程 Callable和Future

Java多线程 Callable和Future 文章目录Java多线程 Callable和Future1、简介2、使用 1、简介 (1)先来了解一下Callable 接口 Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务。Callable接口的定义如下: public interface Callable<V&g...

烟雨gps 409

java多线程编程之Callable实现多线程

Runnable接口实现多线程有一个缺点就是执行完毕后无法获取一个返回值,从jdk1.5之后提出一个新的线程实现接口:java.util.concurrent.Callable接口。 首先看这个接口的定义: @FunctionalInterface public interface Callable<V>{ public V call() throws Exception; } ...

qq_36358700的博客 422

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

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

阿牛的博客 2406

Java多线程之Callable和Future

假设有一个很耗时的返回值需要计算,并且这个返回值不是立刻需要的话,那么就可以使用这个组合,用另一个线程去计算返回值,而当前线程在使用这个返回值之前可以做其它的操作,等到需要这个返回值时,再通过Future得到,岂不美哉!而用方法2,必须等第一个文件下载结束后,才会获得其他文件的下载结果。代码是不是简化了很多,ExecutorService继承自Executor,它的目的是为我们管理Thread对象,从而简化并发编程,Executor使我们无需显示的去管理线程的生命周期,是JDK 5之后启动任务的首选方式。

耕耘——从菜鸟到高手的蜕变 465

Java实现callable_[JAVA]多线程之实现Callable接口

通过继承Callable方式实现的多线程可以获取线程执行后的返回值示例代码如下:public class Counter implements Callable {@Overridepublic Integer call() throws Exception {System.out.println("\tstart");int sum = 0;for (int i = 0; i < 100;...

weixin_40003233的博客 107

Java多线程回调接口Callable

    Java 5 引入了多线程编程的一个新方法,不需要直接new Thread () 创建一个新的线程。只要创建一个 ExecutorService 的线程池,并将实现了 Callable 接口的任务(task)提交到线程池,就能得到带有回调结果的Future对象,通过操作Future得到结果,接下来,我们通过一个实例来学习这一部分的知识。    实例目的:通过两个线程,返回一个整型数组中的最...

m0_38004293的博客 2301

Java多线程之Callable接口的实现

文章目录有返回值的线程线程池管理测试结果 有返回值的线程 package com.zfinfo; import java.util.List; import java.util.Vector; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.c...

IT打工匠 2609

java多线程创建之实现Callable的方法

一、理解 Future接口: 可以对具体Runnable、Callable任务的执行结果进行取消、查询是 否完成、获取结果等。 FutrueTask是Futrue接口的唯一的实现类 FutureTask 同时实现了Runnable, Future接口。它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值 实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? call()可以有返回值的。 call()可以抛出异常

weixin_46122692的博客 463
上一篇: js把属性具有父子关系的json文件转变成json树
下一篇: SSH整合:二次整合
Yuwen_forJava
博客等级 码龄9年 28粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值