1、同步与异步:

同步与异步通常来形容一次方法调用。

  • 同步:方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
  • 异步:方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。此时,其实异步方法会在另一个线程中真实的执行着,整个过程不会阻碍调用者工作。

同步一般用于多线程时使用,多个线程同时访问一个非final修饰的数据时,一般为了避免线程安全问题使用同步请求。

异步一般用于AJAX请求,异步加载。

  • 同步:提交请求->等待服务器处理->处理完返回 这个期间客户端浏览器不能干任何事
  • 异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

例子: (注:本段内容摘自Java高并发程序设计)

打个比方,比如我们去购物,如果你去商场实体店买一台空调,当你到了商场看中了一款空调,你就想售货员下单。售货员去仓库帮你调配物品。这天你热的实在不行了。就催着商家赶紧给你配送,于是你就等在商场里,候着他们,直到商家把你和空调一起送回家,一次愉快的购物就结束了。这就是同步调用。

不过,如果我们赶时髦,就坐再家里打开电脑,在网上订购了一台空调。当你完成网上支付的时候,对你来说购物过程已经结束了。虽然空调还没有送到家,但是你的任务都已经完成了。商家接到你的订单后,就会加紧安排送货,当然这一切已经跟你无关了,你已经支付完成,想什么就能去干什么了,出去溜达几圈都不成问题。等送货上门的时候,接到商家电话,回家一趟签收即可。这就是异步调用。

2、Java同步机制的四种实现方式:

①ThreadLocal ②synchronized() ③wait()与notify() ④volatile

目的:都是为了解决多线程中的对同一变量的访问冲突

1)ThreadLocal:

ThreadLocal保证不同线程拥有不同实例,相同线程一定拥有相同的实例,即为每一个使用该变量的线程提供一个该变量值的副本,每一个线程都可以独立改变自己的副本,而不是与其它线程的副本冲突。

优势:提供了线程安全的共享对象

与其它同步机制的区别:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信;而ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源,这样当然不需要多个线程进行同步了。

2)volatile:

volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。

  • 优势:这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
  • 缘由:Java 语言规范中指出,为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而volatile关键字就是提示JVM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
  • 使用技巧:在两个或者更多的线程访问的成员变量上使用 volatile 。当要访问的变量已在 synchronized 代码块中,或者为常量时,不必使用。

线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步,因此存在A和B不一致的情况。volatile就是用来避免这种情况的。 volatile告诉JVM,它所修饰的变量不保留拷贝,直接访问主内存中的(读操作多时使用较好;线程间需要通信,本条做不到)

Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。

您只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:

对变量的写操作不依赖于当前值;该变量没有包含在具有其他变量的不变式中。

3)sleep() vs wait():

  • sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
  • wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

(如果变量被声明为volatile,在每次访问时都会和主存一致;如果变量在同步方法或者同步块中被访问,当在方法或者块的入口处获得锁以及方法或者块退出时释放锁时变量被同步。)

Java 同步、异步相关推荐

  1. java同步异步调用_详解java 三种调用机制(同步、回调、异步)

    1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,jsPwwCe它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消 ...

  2. java 同步异步_Java中的同步于异步

    java异步同步应用 所谓异步输入输出机制,是指在进行输入输出处理时,不必等到输入输出处理完毕才返回.所以异步的同义语是非阻塞(None Blocking). 网上有很多网友用很通俗的比喻 把同步和异 ...

  3. java同步异步区别_同步请求和异步请求的区别

    同步请求和异步请求的区别 先解释一下同步和异步的概念 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的 ...

  4. java 同步 异步 阻塞 非阻塞_Java日志正确使用姿势,大白话搞懂什么是同步/异步/阻塞/非阻塞...

    前言 关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中"尽情"的打印我们需要的信息了.但是往往越简单的东西越容易让我们忽视,从而导致一些不该有的 ...

  5. java同步变异步框架_java-如何使用Spring配置异步和同步事件发布者

    我正在尝试使用spring事件实现事件框架,后来我知道spring事件框架的默认行为是sync.但是在春季上下文初始化期间,如果它找到ID为applicationEventMulticaster的be ...

  6. java 异步阻塞_大白话搞懂什么是同步/异步/阻塞/非阻塞

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前言 在最近的一些面试中,跟应聘者聊了比较多关于"同步/异步,阻塞/非阻塞"相关的话题,发现大家对于这些概念的理解都比较模糊,甚至有的 ...

  7. java同步,异步和阻塞,非阻塞的联系和区别

    http://www.iteye.com/topic/1131578#2399581 http://www.ibm.com/developerworks/cn/linux/l-async/ https ...

  8. java 同步和异步

    1.举个例子:普通B/S模式(同步)AJAX技术(异步) 同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步: 请求通过事件触发->服务器处理( ...

  9. java异步调用微信接口_微信支付V3 SDK(Java版,支持同步异步调用)

    我们在开发微信支付时,发现微信官方已经对SDK做了升级,V3版本的SDK从设计上符合RESTful规范. 我们再在开源库中寻找是否有现成de开箱即用.并且支持响应式编程的SDK版本.经过一凡寻找,令我 ...

最新文章

  1. Android程序员眼中世界上最遥远的距离
  2. bash 判断 os 版本_Kali Linux 2020.3开始用ZSH取代Bash旅程
  3. build vue 静态化_页面静态化
  4. 台式计算机哪款好,台式一体机电脑哪款好
  5. 59.node的serve-favicon中间件的使用
  6. 如何用 Nginx 禁止国外 IP 访问网站 ?
  7. Abaqus安装在lincense server1出错
  8. 多功能图片处理器微信小程序源码下载一键多种处理照片
  9. app接口开发整理(1)
  10. iphone 4 到iphone 6s plus的屏幕尺寸
  11. word2010删除作者信息
  12. java qq批量注册_JavaQQ 模仿QQ,实现简单的qq功能:注册、登陆、查找好友、聊天 。服务端还需 配置文件 ICQ-IM-Chat 272万源代码下载- www.pudn.com...
  13. 简单测试服务器磁盘读写速度
  14. Win10连接上了wifi,但显示Internet无网络访问权限的解决方法
  15. C# 理解Thread.Sleep()方法
  16. MMR: 控制推荐多样性算法
  17. 阿联酋亚洲杯 伊朗2:0轻取越南 携手伊拉克、沙特提前出线
  18. C++ vector删除元素
  19. excel格式设置:自定义单元格让数据大变身
  20. easypoi 导入错误返回流_C++ I/O 流

热门文章

  1. C# 压缩MDB数据库
  2. Windows 10操作系统安装 Bernese5.2
  3. c语言程序 电子钢琴按键,基于51单片机8按键电子琴-简易版系统设计(原理图+程序仿真+论文)...
  4. 订阅号如何实现网页授权?
  5. quickfix的使用
  6. EasyConnect服务器启动失败,建议关闭浏览器后重新登录
  7. 跨链技术——公证人机制
  8. Python文件反编译,还原代码(xxd、uncompyle6)
  9. 才子软件单机普及版仅售300元
  10. 模拟一级计算机操作题系统,大学计算机一级模拟操作题1.pdf