我曾经在一个面试中被问到说说县城池是怎样执行任务的,由于对这个知识点不是很清楚, 我当时很紧张,回答的不好。因此呢,面试完当天我就恶补了这个知识点,现在来重温一下。收到执行任务,我们就必须先谈谈提交任务。提交任务的方式有两种,一种是 xq 的,还有一种是萨波密的 端正方式。在前面的章节已经讲过,他们的区别在于, xq 的只能提交 rendower 任务,也就是无返回之任务。而 萨波密特既可以提交 red 任务,也可以提交科尔布任务,也就是有返回值的任务。虽然两者提交任务的种类有差异,但是他们最终处理任务的方法是相同的,都是 siri 的 pro 一个 ccut 类中的 xq 的方法。 xq 的方法的实现就在所有的 polo excel 内中。 summe 的方法的实现是在而吹掉的 xqtus 车厢内中。看看 superme 的方法内部 论哪些操作。首先判断任务是否为空,当任务为空时,抛一个空,指针异常。当任务不为空时,将 任务转为有返回值任务。然后调用 xq 的方法执行该任务。此处调用的是所谓的 polo excut 类中的 xq 的方法。最后返回 futile 对象。钓鱼者在通过 futile 对象拿到执行结果 下来重点讲讲 xq 的方法。 xq 的方法可分为三个部分来看,第一部分,判断核心限制数是否已满,能否 再加入新的核心县城。第二部分,判断任务队列是否隐满,能否再加入新的任务。第三部分,判断县城池中的县城是否隐满,能否再加入新的县城? 接下来依次来看这三个部分。首先来看第一部分,判断核心限制数是否已满,也就是这款代码 workcome f 方法的作用是获取当年县城池中有多少县城。 coco 赛的属性记录了当前县城池中有多少核心县城, 当池中的县城数小于核心县城数,也就是核心县城没满时,添加核心县城并执行提交的任务,也就是这行代码 a 的沃尔克方法的作用是往县城池中添加县城。该方法有两个参数,第一个参数是指定给县城的任务,在 县城刚创建的时候就可以指定任务,县城拿到任务以后就开始执行。第二个仓数是指定该县城是否为核心县城 代表是核心陷阱, boss 代表不是核心陷阱。我们知道成为核心陷阱就意味着即使空闲下来也不会被销毁,当然单独设置允许销毁核心陷阱除外。 oppo 方法我们就简单的说完了,现成添加成功会怎样?现成添加成功,执行完任务,这个流程就结束了,直接蕊叹,这是添加成功的情况,加 设添加失败,也就是核心建成已满。继续往下执行。 ctr 记录着县城池状态和池中有多少县城,这里或许他的值是为后续流程做准备。接下来看第二部分。当 核心县城已满时,我们就要考虑将任务先放入任务队列中,此时要判断一下任务对列是否已满,你在往里判断限制值是否还在运行,如果没在运行好,直接跳过这个流程进入下一个流程,如果限制值还在运行,将 任务添加至任务对列中,也就是调用 ok 区域的 offer 方法,如果添加成功,任务将在对列中等待为执行。 流程图是怎样的?任务对你没满,任务添加成功,等待被窒息,这就是对你没满的情况。来看左边的代码部分, 一副语句里面还有任务添加后的操作,再次获取限制时状态,检查限制时是否还在运行,如果没运行,就从队列中移出任务,然后拒绝任务。如果限制时还在运行, 就检查池中的县城数量是否为零,也就是池中已经没有可用的县城,那么就添加一个非核心县城。至此,第二部分看完,再来看第三部分。当任务对联已满时, 就需要考虑往县城池中添加县城,如果池中的县城没满,那么就直接添加县城,并执行提交的任务,这是一种结果。还有一种结果是,当池中的县城已满,无法再往里面添加新县城时, 我们只有将任务拒绝掉。这次第三部分看完,我们已经还完,整个流程图也已看完。代码执行过程,应该来说代 搭配着流程图一起看,这个过程理解起来更容易。最后总结一下本节内容,本节介绍了县城池执行任务的流程,如图所示,以后在面试中 遇到类似的问题就可以轻松应对了。顺势只看 xq 的方法,原代码能否在纸上将其流程图画出来,看自己掌握了多少。流程图我放在了爹的汉服上,大家如果有需要的话可以前去查看。