上次已经为大家介绍过java多线程的同步与异步,为大家详细分析了这两者的基本概念,今天再来详细的解析一下这两者之间的区别,并且它们的表现也是不同的,一起来了解一下吧。
首先,他们最大的区别是,同步需要等待,而异步无需等待。
举个例子说明一下:
普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干别的事。
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕。
说的再通俗易懂点,同步是按顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。
线程就是异步实现的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。
实现异步可以采用多线程技术或则交给另外的进程来处理。
同步和异步区别:(好处和坏处)
同步可以避免出现死锁,读脏数据的发生。一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错。
同步就会按顺序来修改。但是,同步需要等待资源访问结束,浪费时间,效率低。
异步则可以提高效率,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。
但是安全性较低。
同时,需要注意的是,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自顾自的处理它自己的事儿,不用干等着这个耗时操作返回
而线程的适用范围则是那种需要长时间CPU运算的场合,例如耗时较长的图形处理和算法执行。但是往往由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。
异步与多线程,从辩证关系上来看,异步和多线程并不时一个同等关系,异步是目的,多线程只是我们实现异步的一个手段。
什么是异步:异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回.实现异步可以采用多线程技术或则交给另外的进程来处理。
总而言之,同步与异步之间是相辅相成相互合作的关系,这两者可以联系在一起进行理解。java中这种琐碎的知识点还是很多的,也需要大家多费些心思。想要了解更多java基础知识和常见问题,敬请关注奇Q工具网。
推荐阅读: