码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 走近Callable


    1.特点

    1. 可以有返回值
    2. 可以抛出异常
    3. 方法不同, run() / call();

    Callable 接口类似于Runnable ,因为它们都是为其实例可能有另一个线程执行的类设计的,

    然而,Runnable不返回结果,也不能抛出被检查的异常。

    2.代码测试

    1. package com.kuang.callable;
    2. import java.util.concurrent.Callable;
    3. import java.util.concurrent.ExecutionException;
    4. import java.util.concurrent.FutureTask;
    5. import java.util.concurrent.TimeUnit;
    6. public class CallableTest {
    7. public static void main(String[] args) throws ExecutionException, InterruptedException {
    8. // new Thread(new Thread(new Runnable())).start(); 现在尽量少用
    9. // new Thread(new FutureTask()).start();
    10. // new Thread(new FutureTask(Callable())).start();
    11. //怎么启动Callable
    12. MyThread myThread = new MyThread();
    13. FutureTask futureTask = new FutureTask(myThread);//适配类
    14. new Thread(futureTask,"A").start();
    15. //会被阻塞直到它callable线程结束才会走这个方法
    16. String res = (String) futureTask.get();//获取返回值
    17. System.out.println(res);
    18. }
    19. }
    20. class MyThread implements Callable {
    21. //泛型的类型 等于 call() 方法返回值的类型
    22. @Override
    23. public String call() throws Exception {
    24. System.out.println("began");
    25. TimeUnit.SECONDS.sleep(10);
    26. System.out.println(Thread.currentThread().getName());
    27. return "2131sadad";
    28. }
    29. }

    源码返回  FutureTask的run方法

    1. public void run() {
    2. if (state != NEW ||
    3. !UNSAFE.compareAndSwapObject(this, runnerOffset,
    4. null, Thread.currentThread()))
    5. return;
    6. try {
    7. Callable c = callable;
    8. if (c != null && state == NEW) {
    9. V result;
    10. boolean ran;
    11. try {
    12. result = c.call();
    13. ran = true;
    14. } catch (Throwable ex) {
    15. result = null;
    16. ran = false;
    17. setException(ex);
    18. }
    19. if (ran)
    20. set(result);
    21. }
    22. } finally {
    23. // runner must be non-null until state is settled to
    24. // prevent concurrent calls to run()
    25. runner = null;
    26. // state must be re-read after nulling runner to prevent
    27. // leaked interrupts
    28. int s = state;
    29. if (s >= INTERRUPTING)
    30. handlePossibleCancellationInterrupt(s);
    31. }
    32. }

  • 相关阅读:
    Android AIDEGen tools基本使用
    使用idea搭建SpringCloud项目(及所遇到的坑)
    2021 年全国职业院校技能大赛高职组“信息安全管理与评估”赛项 A 卷 第一阶段任务书
    【web渗透】SSRF漏洞超详细讲解
    用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件
    flex 完成六等分布局
    【Linux】环境变量
    线性代数|机器学习-P1课程简介
    从字节码层面解析Java语言--i与i--的区别
    Node.js【使用 Express 写接口】
  • 原文地址:https://blog.csdn.net/qq_53374893/article/details/132939356
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号