湘潭学校网站建设 磐石网络第一校园app开发

pingmian/2026/1/27 3:32:54/文章来源:
湘潭学校网站建设 磐石网络第一,校园app开发,iis网站,网站单页推广文章目录 1.介绍2.使用示例3.执行过程描述4.整体的关系5.涉及到的核心源码#xff08;只提取了关键代码#xff09;5.1 Callable5.2 RunnableFuture5.3 FutureTask5.4 Thread 1.介绍 FutureTask 能够接收 Callable 类型的参数#xff0c;用来处理有返回结果的情况。 2.使用… 文章目录 1.介绍2.使用示例3.执行过程描述4.整体的关系5.涉及到的核心源码只提取了关键代码5.1 Callable5.2 RunnableFuture5.3 FutureTask5.4 Thread 1.介绍 FutureTask 能够接收 Callable 类型的参数用来处理有返回结果的情况。 2.使用示例 // 创建任务对象 FutureTaskInteger task new FutureTask(() - {log.debug(running);Thread.sleep(1000);return 200; });new Thread(task).start();// 主线程阻塞同步等待 task 执行完毕的结果 Integer value task.get();System.out.println(value value);3.执行过程描述 FutureTask 类在实例化构造时需要传入一个实现了 Callable 接口的类实现 Callable 接口需要重写 call 方法该方法需要一个返回值由于 Callable 定义时是以泛型定义返回值因此我们可以自定义返回值。FutureTask 会将传入的这个 Callable 实现类赋给自己的属性 private CallableV callable;FutureTask 间接实现了 Runnable 接口并重写了 run 方法重写的 run 方法中会调用到 属性 callable 的 call 方法并将 call 方法返回值存储到自己的属性 private Object outcome;Thread 类在实例化构造时可以传入一个 Runnable 接口的类由于 FutureTask 实现了 Runnable 接口因此我们可以直接将 FutureTask 对象作为构造器实参赋给 Thread对象的属性 private Runnable target;Thread 对象调用 start 方法最终会调用到自身就重写了的 run 方法自身重写的 run 方法中又会调用到 target 的 run 方法即 FutureTask 自身已经重写的 run 方法这时候就可以回到“第 2 点讲解”了解到 FutureTask 的 run 方法中所做的事情。FutureTask 对象的 get() 方法是去获取 callable 的 call 方法返回值即属性 outcome 的值。get 方法中会调用 awaitDone 方法awaitDone 方法中会使用 for (;;) 造成当前线程阻塞直到 call 方法执行结束可以获取到 outcome 的值并将 outcome 作为 get() 方法返回值。 4.整体的关系 Thread 和 FutureTask 类均实现了 Runnable 接口并重写了其 run 方法Thread 将 FutureTask 进行聚合赋给 private Runnable target。 5.涉及到的核心源码只提取了关键代码 5.1 Callable FunctionalInterface public interface CallableV {/*** Computes a result, or throws an exception if unable to do so.** return computed result* throws Exception if unable to compute a result*/V call() throws Exception; }5.2 RunnableFuture public interface RunnableFutureV extends Runnable, FutureV {/*** Sets this Future to the result of its computation* unless it has been cancelled.*/void run(); }5.3 FutureTask public class FutureTaskV implements RunnableFutureV {/** The underlying callable; nulled out after running */private CallableV callable;// 存储 callable 接口的 call 方法的返回值/** The result to return or exception to throw from get() */private Object outcome; // non-volatile, protected by state reads/writes/*() - {log.debug(running);Thread.sleep(1000);return 200;}这实际上是对函数式接口 callable 的 V call() 方法进行实现*/public FutureTask(CallableV callable) {if (callable null)throw new NullPointerException();this.callable callable;this.state NEW; // ensure visibility of callable} public void run() {// ...CallableV c callable;// 重写了 Runnable 函数式接口的 run 方法result c.call();// ...// 赋值set(result);// ...}protected void set(V v) {if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {// 将 callable 的 call 方法返回值即我们自定义的 200 赋给 outcomeoutcome v;UNSAFE.putOrderedInt(this, stateOffset, NORMAL); // final statefinishCompletion();}}// 获取 callable 的 call 方法的返回结果public V get() throws InterruptedException, ExecutionException {int s state;if (s COMPLETING)// 获取到结果成功的标识实际是在 awaitDone 方法中用了死循环不断判断是否生成返回结果造成了线程阻塞s awaitDone(false, 0L);// 获取结果return report(s);}// timed-是否计时等待即是否设置等待超时false表示不设置true表示设置private int awaitDone(boolean timed, long nanos)throws InterruptedException {final long deadline timed ? System.nanoTime() nanos : 0L;WaitNode q null;boolean queued false;// 死循环for (;;) {if (Thread.interrupted()) {removeWaiter(q);throw new InterruptedException();}int s state;if (s COMPLETING) {if (q ! null)q.thread null;return s;}else if (s COMPLETING) // cannot time out yetThread.yield();else if (q null)q new WaitNode();else if (!queued)queued UNSAFE.compareAndSwapObject(this, waitersOffset,q.next waiters, q);else if (timed) {nanos deadline - System.nanoTime();if (nanos 0L) {removeWaiter(q);return state;}LockSupport.parkNanos(this, nanos);}elseLockSupport.park(this);}} }5.4 Thread public class Thread implements Runnable {/* What will be run. */private Runnable target;// 构造器将间接实现了 Runnable 接口的 FutureTask 对象传进来public Thread(Runnable target) {init(null, target, Thread- nextThreadNum(), 0);}private void init(ThreadGroup g, Runnable target, String name, long stackSize) {init(g, target, name, stackSize, null, true);}private void init(ThreadGroup g, Runnable target, String name,long stackSize, AccessControlContext acc,boolean inheritThreadLocals) {// ...// 将 FutureTask 对象赋给 Thread 对象的属性 targetthis.target target;}Overridepublic void run() {if (target ! null) {// 实际调用的 FutureTask 对象重写的 run 方法重写的 run 方法中又会调用 callable 接口的 call 方法并将 call 方法的返回值赋给 FutureTask 对象的属性 outcometarget.run();}} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ps如何做psd模板下载网站小县城做网站

大话西游6664版。根据你的系统平台下载相应的版本后,如果是压缩文件,先解压后双击运行,不是压缩文件,直接双击运行就可以了,运行后出现下面的界面,在下面界面上单击“Next”。跟所有的软件安装包一样&#…

深圳网站建设服务联系方式虚拟主机只能静态网站

——“小米加步枪是打不赢现代化战争的。” ——”CRM系统已成为企业掘金未来的必备。“ 数字化转型已经成为了企业发展的重要方向,然而数字化转型不仅仅是把线下搬到线上,更重要的是,真正的数字化转型应该以客户的连接和客户的数字化作为突破…

深圳企业营销型网站建设无忧网站建设价格

随着数字化时代的到来,大数据已经成为了各行各业中不可或缺的资源。然而,有效地分析和利用大数据仍然是一个挑战。在这个背景下,OpenAI推出的Code Interpreter正在对数据分析领域进行颠覆性的影响。 如何颠覆数据分析领域?带着这…

用哪个软件做网站好深圳设计网站建设公司

其实lambad表达式就是“函数”或者说是“方法”写法的一个进化,越来越简化而已,如数学方法里的f(X)。 匿名方法:顾名思义,匿名方法就是没有名称的方法,但是有定义参数。 匿名方法最明显的好处就是可以降低另写一个方法…

安远县建设局网站用angularjs做的网站

文章目录 1. MVCC多版本并发控制机制2. BufferPool缓存机制 1. MVCC多版本并发控制机制 Mysql可以在可重复读隔离级别下可以保证事务较高的隔离性,这个隔离性是由MVCC机制来保证的,对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性&#…

网站开发怎样将信息栏到最底部深圳做网站公司华

Eclipse修改注释的方法:  窗口-》首选项-》java-》代码样式-》代码模板-》注释-》方法-》确定,下面就可以修改了  Netbeans修改注释的方法:  工具->模板 打开 看见那一排列表没有 展开Java 选择Java类 点击 在编辑器中打开 …

北京南站在哪个区哪个街道运维35岁以后会失业吗

随着电子行业的发展,对电源的要求体积更小、可靠性更高。加上高频软开关技术、半导体工艺和封装技术的进步,电源模块的功率密度越来越大,转换效率也越来越高,应用更加简单了。 电源模块与分立式方案相比,优势在哪里&am…

如何使用二级域名做网站站长工具域名查询

题目描述在一个字符串(0<字符串长度<10000&#xff0c;全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1&#xff08;需要区分大小写&#xff09;.解析暴力解法&#xff0c;时间复杂度是 。# -*- coding:utf-8 -*- class Solution:def Fi…

高端网站建设专业公司网站建设维护教程

oracle 环境下&#xff0c;调用方法NumberCodeGenerateManager.OcuppyModelNumberCodesAfterSaved(ObjectID, modelID, ds)进行编号占用。当DataSet的数据行数〉1000时&#xff0c;会报语法错误&#xff1a;ORA-01795: 列表中的最大表达式数为 1000。跟踪语句如下&#xff1a;u…

凡科建设网站如何网站开发商可以代刷好评吗

文章目录 1、位运算符2、特殊关键字的使用&#xff1a;break、continue3、成员变量&#xff08;类的属性&#xff09;和局部变量的区别4、this关键字5、super关键字6、抽象类与abstract关键字7、接口8、Java权限修饰符 1、位运算符 注意&#xff1a; ①右移根据最高位是0&#…

单位网站建设存在问题情况汇报wordpress 汉语字体

在Ubuntu中使用Git时&#xff0c;可使用命令行的git diff命令来对比两次提交的差异&#xff0c;但是这种对比查看方式无法直观地查看修改的差异&#xff0c;在对比和查看时不太方便。 可以使用vimdiff作为Git diff的对比工具&#xff0c;这样就方便了许多&#xff0c;Git的配置…

池州做网站移动通信网站建设

ncverilog仿真详解发表在ASIC/FPGA/汇编, 学习笔记, 编程开发 | 由阿布 | 十一月26, 2011 | 0标签: ncverilog, 仿真数位IC工具简介——Simulator 工具ModelSimModelSim是Mentor公司所推出的软体, 主要用来当作VHDL的模拟器, 也是目前CIC在VHDL方面的主要的模拟软体;但ModelSim…

跳转网站正在建设中wordpress素才

1.正常配置vmware虚拟机基础环境 2.启动虚拟机&#xff0c;会先到efi network&#xff0c;等待几分钟 3.进入boot manager&#xff0c;选择启动方式&#xff0c;记得提示CD启动的时候需要按回车&#xff0c;不然又会回到这个界面 4.选择安装版本为桌面版&#xff08;开始直接…

企业网站能提供哪些服务深圳市龙华区属于哪个区

Abstract 大型语言模型 (LLM) 通过利用思维链 (CoT) 提示生成中间推理链作为推断答案的基本原理&#xff0c;在复杂推理方面表现出了令人印象深刻的性能。然而&#xff0c;现有的 CoT 研究主要集中在语言情态上。我们提出了 Multimodal-CoT&#xff0c;它将语言&#xff08;文本…

企业精髓八个字关键词 优化 网站

C 变量作用域 一般来说有三个地方可以定义变量&#xff1a; 在函数或一个代码块内部声明的变量&#xff0c;称为局部变量。在函数参数的定义中声明的变量&#xff0c;称为形式参数。在所有函数外部声明的变量&#xff0c;称为全局变量。 作用域是程序的一个区域&#xff0c;…

宝山网站建设哪家好网页制作模板 html

点project 关闭防火墙才可以让别人访问自己 转载于:https://www.cnblogs.com/feathe/p/6853491.html

上海专业网站建设流程东莞关键词排名提升

工作中能提升效率也都是大家所想的&#xff0c;对于设计师的一个设计过程中&#xff0c;可能想怎么样可以更快呀&#xff0c;是哪个步骤慢了呢&#xff1f; 这样的结果只能说会很多&#xff0c;但是建模这个步骤&#xff0c;肯定是有多无少的。 为了让模型更加逼真&#xff0c…

门户网站建设背景wordpress新增用户字段

一个配置恰当的mongodb 分片集群不会有单点失效。 本章节描述了集群服务器中可能出现的故障&#xff0c;及相应的对策。 1. 某个mongos路由进程故障 每一个mongos会运行每一台应用服务器上面&#xff0c;该应用服务器只能通过这个mongos进程和集群进行通信。mongos进程不是…

网站开发建设技术规范书军事新闻今天

CSDN每日一练 |『生命进化书』『订班服』『c++难题-大数加法』2023-09-06 一、题目名称:生命进化书二、题目名称:订班服三、题目名称:c++难题-大数加法一、题目名称:生命进化书 时间限制:1000ms内存限制:256M 题目描述: 小A有一本生命进化书,以一个树形结构记载了所有生…

中国铁道工程建设协会查证网站购物网站首页源码

zookeeper 集群 1、zookeeper 集群说明 initLimit 是Zookeeper用它来限定集群中的Zookeeper服务器连接到Leader的时限 syncLimit 限制了follower服务器与leader服务器之间请求和应答之间的时限 服务器名称与地址&#xff1a;集群信息&#xff08;服务器编号&#xff0c;服务器…