码农知识堂 - 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. }

  • 相关阅读:
    处理Centos 7 中buff/cache高的问题
    如何在Django中使用django-crontab启动定时任务、关闭任务以及关闭指定任务
    3-3主机发现-四层发现
    js数据结构[单项链表];
    『亚马逊云科技产品测评』活动征文|阿里云服务器&亚马逊服务器综合评测
    国家开放大学 模拟试题训练
    TCP挥手中TIME_WAIT存在的原因
    netty
    WSW-PEG-IR825 肝靶向多肽WSW-聚乙二醇-近红外荧光染料IR825
    【数据仓库设计基础1】关系数据模型理论与数据仓库Inmon方法论
  • 原文地址: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号