专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java异步编程最佳实践教程

Java异步编程最佳实践教程

更新时间:2019-11-14 14:03:38 来源:动力节点 浏览2548次



timg (10).jpg

  什么是异步?为什么要用它?


  异步编程提供了一个非阻塞的,事件驱动的编程模型。这种编程模型利用系统中多核执行任务来提供并行,因此提供了应用的吞吐率。此处吞吐率是指在单位时间内所做任务的数量。在这种编程方式下,一个工作单元将独立于主应用线程而执行,并且会将它的状态通知调用线程:成功,处理中或者失败。


  我们需要异步来消除阻塞模型。其实异步编程模型可以使用同样的线程来处理多个请求,这些请求不会阻塞这个线程。想象一个应用正在使用的线程正在执行任务,然后等待任务完成才进行下一步。log框架就是一个很好的例子:典型地你想将异常和错误日志记录到一个目标中,比如文件,数据库或者其它类似地方。你不会让你的程序等待日志写完才执行,否则程序的响应就会受到影响。相反,如果对log框架的调用是异步地,应用就可以并发执行其它任务而无需等待。这是一个非阻塞执行的例子。


  为了在Java中实现异步,你需要使用Future和FutureTask,它们位于java.util.concurrent包下.Future是一个接口而FutureTask是它的一个实现类。实际上,如果在你的代码中使用Future,你的异步任务会立即执行,并且调用线程可以得到结果promise。


  下面的代码片段定义了一个包含两个方法的接口。一个是同步方法,另外一个是异步方法。

  import java.util.concurrent.Future;public interface IDataManager { // synchronous method public String getDataSynchronously(); // asynchronous method public Future<String> getDataAsynchronously();}

  import值得注意的是回调模型的弊端就是当回调嵌套时很麻烦。


  该做和不该做的


  为了方便测试,你应该在代码中将功能从多线程中隔离出来。当在Java中编写异步代码时,你应该遵循异步模型,这样调用线程就不会被阻塞。


  注意构造函数不能是异步的,你不应该在构造函数中调用异步方法。当任务互相不依赖时异步方式尤其有用。当调用任务依赖被调用任务时不应该使用异步(译者按:这对异步来说无意义,因为业务上调用线程被阻塞了).


  你应该在异步方法中处理异常.你不应该为长时间的task实现异常.一个长时间运行的任务,如果异步执行的话,可能会比同步执行耗费更长的时间,因为运行时要为异步执行的方法执行线程上下文的切换,线程状态的存储等.你也应该注意同步的异常和异步的异常有所不同。同步异常暗示每次程序执行到那个程序特殊状态时就会抛出异常;异步异常的跟踪则困难的多。所以同步和异步异常暗示同步或异步代码可能抛出异常(synchronousandasynchronousexceptionsimplysynchronousorasynchronouscodeinyourprogramthatmightraiseexceptions.)。java.util.concurrent.Future;publicinterfaceIDataManager{//synchronousmethodpublicStringgetDataSynchronously();//asynchronousmethodpublicFuture<String>getDataAsynchronously();}


  总结


  异步对于设计大规模快速响应的应用是至关重要的。异步回调模型带来了很多的好处;你可以依赖你的异步回调方法来执行昂贵的I/O操作而你的处理器可以执行其它任务。然而虽然在Java和C#中提供了异步的支持,异步编程并不总是那么容易实现。异步方式的使用要谨慎:你应该清楚什么时候可以用和什么时候不该用。


       以上就是动力节点java学院小编针对“Java异步编程最佳实践教程”的内容进行的回答,希望对大家有所帮助,如果对于学习Java的学习计划,怎么学才有效率,或者学完如果找工作的问题,请在线咨询,有专业老师随时为你服务。


零基础自学java教程推荐


最新java视频教程免费下载(从入门到精通):http://www.bjpowernode.com/video.html


零基础java自学教程http://www.bjpowernode.com/tutorial_java_se/


相关推荐


零基础学Java编程,这些内容你一定要知道


学习Java编程了解一些免费Java开发工具


初学者学Java编程真的很难?


新手自学Java编程需要多长时间呢


学习Java编程可以做什么



提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>