7、Callable接口

article/2025/4/29 12:04:13

7.1、Calledable接口与Runnable接口的区别

  1. 是否有返回值

Calledable 有返回值;Runnable无返回值

  1. 是否抛出异常

Calledable 会抛出异常;Runnable不会抛出异常

  1. 实现方法名称不同

Calledable 实现的是call方法;Runnable实现的是run方法

7.2、Calledable接口与Runnable接口创建线程

package com.ae.juc.callable;import java.util.concurrent.Callable;//实现Runnable接口
class MyThread1 implements Runnable{@Overridepublic void run() {}
}//实现Callable接口
class MyThread2 implements Callable {@Overridepublic Object call() throws Exception {return 200;}
}public class Demo1 {public static void main(String[] args) {//Runnable创建线程new Thread(new MyThread1(),"AA").start();//Callable创建线程(报错)new Thread(new MyThread2(),"BB").start();}
}

7.3、为什么Callable放入Thread的构造器中报错呢?

因为在Thread类的构造器中,根本没有一个是可以传入Callable接口的。都是需要传入Runnable接口。为了要实现Callable接口能干创建线程,我们需要找一个中间类,它既与Runnable接口有关系,同时又与Callable接口有关系,那这个类就是 FutureTask。

7.3、使用FutureTask来实现Callable创建线程

package com.ae.juc.callable;import java.util.concurrent.*;//实现Runnable接口
class MyThread1 implements Runnable{@Overridepublic void run() {System.out.println("----Runnable");}
}//实现Callable接口
class MyThread2 implements Callable {@Overridepublic Object call() throws Exception {System.out.println("----Callable");return 200;}
}public class Demo1 {public static void main(String[] args) throws ExecutionException, InterruptedException {//Runnable创建线程new Thread(new MyThread1(),"AA").start();//Callable创建线程(报错)//new Thread(new MyThread2(),"BB").start();//使用FutureTask来实现Callable创建线程FutureTask<Integer> futureTask1 = new FutureTask<Integer>(new MyThread2());//lam表达式FutureTask<Integer> futureTask2 = new FutureTask<Integer>(() -> {TimeUnit.SECONDS.sleep(5);return 200;});new Thread(futureTask2,"BB").start();Integer res = futureTask2.get();//阻塞方法System.out.println(res);}
}

7.4、Callable创建线程的步骤如下

  1. 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,且该call()方法有返回值,创建Callable实现类的实例。从Java 8开始,可以直接使用Lambda表达式创建Callable对象。
  2. 使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的cal1()方法的返回值。
  3. 使用FutureTask对象作为Thread对象的target创建并启动新线程。
  4. 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。


http://chatgpt.dhexx.cn/article/XiGOYW1p.shtml

相关文章

第五篇、Callable接口实现多线程

文章目录 前言一、实现Callable接口二、代码示例1.Callable接口实现多线程 总结 前言 上一篇我们共同认识了并发问题&#xff0c;那么本篇我们将一起来学习Callable接口实现多线程。 一、实现Callable接口 上篇内容我们通过实现Runnable实现多线程&#xff0c;本篇我们将学习…

高并发之——深入解析Callable接口

本文纯干货&#xff0c;从源码角度深入解析Callable接口&#xff0c;希望大家踏下心来&#xff0c;打开你的IDE&#xff0c;跟着文章看源码&#xff0c;相信你一定收获不小。 1.Callable接口介绍 Callable接口是JDK1.5新增的泛型接口&#xff0c;在JDK1.8中&#xff0c;被声明…

简单理解Callable接口

Callable接口: Callable,新启线程的一种方式,返回结果并且可能抛出异常的任务,在前面的新启线程的文章中用过,但是没有具体讲解 优点: 可以获取线程的执行结果,也称为返回值 通过与Future的结合,可以实现利用Future来跟踪异步计算的结果 Runnable和Callable的区别: Callable规定…

从源码角度详解Java的Callable接口

摘要&#xff1a;本文从源码角度深入解析Callable接口。 本文分享自华为云社区《深入解析Callable接口》&#xff0c;作者&#xff1a; 冰 河 。 本文纯干货&#xff0c;从源码角度深入解析Callable接口&#xff0c;希望大家踏下心来&#xff0c;打开你的IDE&#xff0c;跟着文…

Callable 接口实现java 的多线程

java 中创建多线程最常见的是继承Thread 的子类重写run() 方法&#xff0c;还有就是实现Runnable 接口 我们最好使用实现了Runnable 接口的方法原因有两点&#xff1a; ①因为java 的单继承的特点&#xff0c;所以说使用第一种方法不能继承其他父类了 ②采用接口的方式便于实现…

Callable接口的使用和介绍

Callable public interface Callable<V>返回结果并可能引发异常的任务。 实现者定义一个没有参数的单一方法&#xff0c;称为call 。 Callable接口类似于Runnable &#xff0c;因为它们都是为其实例可能由另一个线程执行的类设计的。 然而&#xff0c;A Runnable不返回…

实现Callable接口

一、实现Callable接口 实现Callable接口&#xff0c;需要返回值类型重写call方法&#xff0c;需要抛出异常创建目标对象创建执行服务: ExecutorService ser Executors.newFixedThreadPool(1);提交执行: Future result1 ser.submit(t1);获取结果: boolean r1 result1 .get()…

Callable接口的理解

Callable接口的定义 FunctionalInterface public interface Callable<V> {V call() throws Exception; }可以看出Callable就是一个拥有call方法的接口&#xff0c;可以把线程中需要执行过程定义到call方法中&#xff0c;跟Runnable接口一样&#xff0c;最终的执行还是需…

java callable接口_Java Callable接口

一 理论 Runnable是执行工作的独立任务&#xff0c;但是不返回任何值。如果我们希望任务完成之后有返回值&#xff0c;可以实现Callable接口。在JavaSE5中引入的Callable是一个具有类型参数的范型&#xff0c;他的类型参数方法表示为方法call()而不是run()中返回的值&#xff0…

6.实现 Callable 接口

6.实现 Callable 接口 前言 本篇章来介绍一下创建线程的第三种方式&#xff0c;其中创建线程一共有四种方式&#xff1a; 继承 Thread 类 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式 那么下面我们来介绍一下 实现 Callable 接口的方式。 Callable 接口 - Jav…

3、创建线程方式三:实现Callable接口

一、步骤 1、定义一个线程任务类实现Callable接口&#xff0c;声明线程执行的结果类型。 2、重写线程任务类的call()方法&#xff0c;这个方法可以直接返回执行的结果。 3、创建一个Callable的线程任务对象。 4、把Callable的线程任务对象包装成一个未来任务对象。 5、把未来任…

JUC之Callable接口

Callable 创建线程有四种方式: 继承Thread类实现Runnable接口Callable接口线程池 前两种前面说过了, Runnable接口是比较常用的, 因为在Java中继承是很重要的, 不能随便使用, 但是Runnable接口有一个缺点, run()方法没有返回值, 也就是当线程结束时, 不能返回结果, 为了能返…

Java多线程 - Runnable接口和Callable接口的区别

文章目录 1. Runnable接口实例2. Callable接口原理3. Callnable接口实例4. FutureTask是什么&#xff1f;5. 线程池中 submit() 和 execute() 方法有什么区别&#xff1f; Runnable接口源码&#xff1a; FunctionalInterface public interface Runnable {// 这个run()方法返回值…

Callable 接口

Callable 接口 是 java.util.concurrent.下的一个泛型接口 , 只有一个call () 方法 , 它是有返回值的 , 我们可以获取多线程执行的结果 , 使用 Callable接口 和 FutureTask 的组合 , 可以实现利用 FutureTask 来跟踪异步计算的结果 获取多线程的方式 1. 继承 Thread 类 2. 实…

Java用Callable接口创建线程

一、概述 使用Callable接口创建线程能够返回数据。与Runnable接口创建线程的方式有点类似&#xff0c;也是需要通过Thread类来创建线程。由于Thread类的构造函数中没有Callable接口&#xff0c;选用了FutureTask类来作为连接创建线程。  FutureTask类实现了RunnableFuture接口…

JUC-多线程(5.获得线程的第三种方式)学习笔记

文章目录 获得线程的第三种方式 &#xff1a; Callable接口 1. 前言1. 获得多线程的方法几种&#xff1f;2. 以下两种获得线程的方式的异同 2. 使用1. 重写 call 方法2.创建线程3.获取返回值 3. 原理1. 简述2. 解释3. 结论 获得线程的第三种方式 &#xff1a; Callable接口 1.…

Callable接口

文章目录 Callable概述Future 接口FutureTask使用 Callable 和 Future小结(重点) Callable概述 目前我们学习了有两种创建线程的方法-一种是通过创建 Thread 类&#xff0c;另一种是通过使用 Runnable 创建线程。但是&#xff0c;Runnable 缺少的一项功能是&#xff0c;当线程…

webshell管理工具之中国蚁剑

实验环境物理机即可 实验工具&#xff1a;中国蚁剑&#xff0c;phpstudy,dvwa网站 一&#xff1a;打开phpstudy开启apache和mysql 1&#xff1a;将dvwa网站放到www目录下 2&#xff1a;用浏览器进行访问 3&#xff1a;登录dvwa网站进行低等级下的文件上传 4&#xff1a;编写…

WebSell管理工具--中国蚁剑安装教程以及初始化

简介&#xff1a;中国蚁剑是一款开源的跨平台WebShell网站管理工具 蚁剑的下载安装&#xff1a; GitHub项目地址&#xff1a;https://github.com/AntSwordProject/ Windows下载安装&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1A5wK…

15 一句话代码 中国蚁剑 中国蚁剑

title 文章目录 前言一、一句话代码 webshell php.php post 注入 二、中国蚁剑 &#xff08;需要下载两个 1&#xff1a;软件 2&#xff1a;解释器&#xff09;三、Burp &#xff08;burp_suite_pro_v2021.8.2&#xff09;4.更新的话 前言 提示&#xff1a; 123 一、一句话代…