码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java基础:通过Callable创建多线程


    前面聊了创建线程的两种方式,一个是通过创建Thread类,还有一种是通过接口Runnable创建线程。

    其实上面两种创建线程都有一个共同的问题,那就是没有返回值也就是无法得到线程的返回结果,所以为了支持这个操作也就有了Callable接口。当然也不是说没有返回值,就无法完成所有的操作,毕竟可以设置一个类属性绑定某个值即可,但是这样毕竟不方便。

    Callable

    现在看一下官网解释:
    在这里插入图片描述

    看官网文档可以总结一下几点:

    • Callable可以实现线程返回结果,以及其实现的结果需要通过call方法,而不是run方法。而实现Callable需要重写Call方法。
    • Call方法可以引发异常,而run方法不能。

    但是现象有一个问题了,那就是如何让Callable和线程关联起来,毕竟Runnable可以和Thrend关联起来的:

    在这里插入图片描述

    而Callable无法与Thread进行关联起来,但是通过官网一直提示是对Runable的返回值优化,是否可以通过Runable然后将Callable与Thread关联起来呢?

    然后打开Runnable然后看到如下:

    在这里插入图片描述

    现在只能依次从实现子类中依次查找了,最后发现了FutureTask:

    在这里插入图片描述

    可以发现一个规律:

    Callable可以通过FutureTask构造方法得到一个FutureTask,而FutureTask是Runnable的子类。
    
    • 1

    下面就可以进行简单的演示了:

    public class test implements Callable {
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            FutureTask futureTask = new FutureTask(new test());
            new Thread(futureTask).start();
    // 通过futuretask得到这个返回值
            System.out.println(futureTask.get());
        }
    
        @Override
        public Object call() throws Exception {
            System.out.println("测试线程");
            return 12;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    其实上面一个线程可以同callable实现,不过应该注意到做FutureTask这个类,现在聊一下这个类的特别之处。
    其中说一点上面用到的FutureTask,其实这个有点像是JavaScript中回调函数了,在JavaScript中回调函数其实也是一种异步运行实现方式。这个本篇就是简单了解,后面单独一篇在捋一下这个类。这里只是简单说一下体验一下即可。毕竟本篇主要要是聊Callable实现线程的方法。后面单独一篇会聊这个类。

  • 相关阅读:
    Rxjs源码解析(一)Observable
    java对象的内存布局
    Android 13.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式
    C++ 内存模型
    【微信小程序开发(三)】实现卡片的层叠滑动
    公共WiFi有风险,使用请注意。
    “全宇宙首个”用中文编写的操作系统,作者还自创了甲、乙、丙编程语言?
    2023年天津/辽宁/安徽/北京DAMA-CDGA/CDGP数据治理认证报名
    如何用Angular和NativeScript开发IOS程序?
    用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制AI助手——PPT大纲助手
  • 原文地址:https://blog.csdn.net/u011863822/article/details/126645129
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号