当前位置: 首页 > 网络应用技术

异步和线程池完整的空格排列

时间:2023-03-08 19:58:04 网络应用技术

  为了节省时间并增加吞吐量,我们必须提出一些异步请求

  1.继承线程

  2.实现可运行的接口

  3.实现可可接口+FutureTask(您可以获得返回结果,您可以处理异常)

  4,线程池

  方法1和方法2:主线程无法获得线程的计算结果。不适合当前场景

  方法3:主过程可以获得线程的计算结果,但它不利于控制服务器中的线程资源。它可以导致服务器资源用尽

  方法4:以以下两种方式初始化线程池

  通过线程池的稳定性能,也可以获得执行结果和异常。但是,在复杂业务的情况下,异步调用可能取决于另一种异步调用的执行结果。

  代码如下:

  方法II实施代码如下

  第三种方法

  您可以看到可可的接口直接结束

  因此,根据FutureTask源代码,我们将使用FutureTask启动可可的线程

  然后,New回到FutureTask,FutureTask继承的RunnableFuture和RunnableFuture sentarable internable,分别为未来,未来

  因此其启动方法是FutureTaskFutureTask =新的FutureTask<>(new call01());新线程(FutureTask).start();

  运行结果如下

  Callable的最大优势是我们假设背景正在缓慢运行。我们还希望背景中此可召唤的计算结果可以使用FutureTask。

  执行异步方法后,返回它的结果

  so integer integer = futureTask.get();这是一个封锁等待

  FutureTask不仅可以接受可召唤,而且可以接受可运行的。如果可以运行,您也可以传递一个对象以允许此对象接受参数

  第四条

  将任务直接提交到线程池。

  为什么要使用线程池?如果我们以后的项目中有更多异步,则每次本机代码为new thread()。开始 ()。

  将来,在业务代码中,以上三种启动线程的方式不能用于避免由资源消耗引起的大量新线程。所有多线程异步任务都应移交给线程池执行

  尽快获得线程池

  每次运行时都不应创建线程池。它应该是一个线程池。

  访问线程池

  其中有提交,可以采用可运行的或呼叫任务,或使用execute让其执行

  提交并执行两个差异

  如果提交将任务添加到线程池中,我们可以获得任务的返回值;如果执行,请让线程池直接执行我们的操作。

  这是我们将任务提交到线程池,而不是我们在新的

  默认线程捕获

  拒绝策略(流产)

  一个简单的测试问题:

  商业现场:

  查询产品细节的逻辑更为复杂。一些数据还需要远程调用。花更多的时间花费更多的时间

  如果产品详细页面上的每个查询,则您需要标记以下时间的时间可以完成

  然后,用户需要5.5秒才能查看产品的详细页面。

  如果多个线程同时完成这6个步骤,则可能只需要完成1.5秒的响应

  未来是Java5添加的类,以描述异步计算的结果。您可以使用“ ISDONE”方法检查计算是否已完成,或使用“ Get”阻止猪肉到'Method停止任务执行

  尽管相关的使用方法提供了异步执行任务,但获取结果非常不便。它只能通过获取或旋转查询才能获得。障碍方法显然与我们异步编程的最初意图背道而驰,并且询问方法将消耗不必要的CPU资源,并且无法及时获得。,例如node.js,使用回调来实现异步编程。诸如Netty之类的Java框架的某些框架扩展了Java接口并提供了多个扩展;Google Guava还提供了普遍的扩展未来;Scala还提供了一个简单而强大的未来/承诺异步编程模式模式,一个正统的Java库,您是否应该做某事并加强您自己的库的功能?在Java 8中,新类包含大约50种方法:完整的方法:提供非常强大的功能,它提供了一个非常强大的方法未来的扩展功能,可以帮助我们简化异步编程的复杂性,并提供功能编程的能力。您可以使用回电的能力。处理计算结果并提供一种转换和组合完整的方法的方法。完整的图类别实现了未来的接口,因此您仍然可以通过通过阻塞或通过阻塞或查询来获得结果方式,但不建议使用此方法

  将来的接口也实现了完整的future和FutureTask,并且两者都可以获得线程的执行结果。

  完整的future是JDK1.8之后添加的完整图的功能,这类似于Promise在VUE中的Ajax请求。

  完整的未来提供了四种静态方法来创建异步操作

  当计算能够处理正常和异常的计算结果时,异常处理异常条件

  何时completable和wheCompletableAsync之间的区别:

  该方法不会以Asyc结尾,这意味着ASYC可以使用其他线程使用相同的线程执行(如果使用相同的线程池,则可以由同一线程执行)

  当complete不是异常

  当Complete是异常的

  异常之后,您也可以处理异常的处理逻辑

  像完整一样,可以制作最终处理(可处理的异常),并且可以更改返回值

  当时的方法:当一个线程依赖另一个线程时,获取上一个任务返回的结果,然后返回当前任务的返回值

  ThenAccept方法:消费处理结果。接收任务和消费处理的处理结果,无回报结果

  thenrun方法:只要执行上述任务,就执行了theenrun,但是在处理任务后,the the the the the the the the the the the the -up操作

  使用异步的默认值,它与以前相同。

  以上必须成功完成

  必须完成两个任务以触发此任务

  theencombine:结合两个未来,获得两个未来的返回结果,然后返回当前任务的返回值

  ThenAcceptboth:结合两个未来以获得两个未来的返回结果,然后处理任务,无返回值

  RunafterBoth:将两个未来结合在一起,不需要获得未来的结果,只需要两个将来才能完成任务

  完成两个任务后,完成任何未来任务后,将执行任务。

  applyToeither:这两个任务具有一个执行,获得了其返回值,处理任务和新的返回值。

  接受:这两个任务具有一个执行,获得了其返回值,处理任务,而没有新的返回值。

  Runaftereither:这两个任务具有一个执行,没有未来的结果,处理任务,没有返回值

  该操作的两个线程已经完成,无法查看Runaftereit的效果,因此Code future02已修改

  Allof:等待所有任务完成

  当线程缓慢执行时

  输出结果没有查询引入所有任务的产品,所有任务结束了,结束了,结束了。

  更改为线池无线活力阻塞

  所以最好直接

  想要将来获取内容

  Anyof:只要一个任务完成

  ///// izet();/);/// fult Yountr.get());// futuredesc.get(););comp upragetablefactual.alllllllllllllllllllllllllllllllllllllllllllllllllllllllll,futurettr,Futuresise);//);等待(;等待.gis));partcedesc);等待/// gis);partcedesc);;;;等待for.completed // allof.join();

  所以最好直接

  想要将来获取内容

  Anyof:只要一个任务完成

  原始:https://juejin.cn/post/7095240003411771428