028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷-创新互联

前置知识

网站设计制作、做网站的关注点不是能为您做些什么网站,而是怎么做网站,有没有做好网站,给成都创新互联公司一个展示的机会来证明自己,这并不会花费您太多时间,或许会给您带来新的灵感和惊喜。面向用户友好,注重用户体验,一切以用户为中心。

知识介绍

Synchronized简介

作用

官方解释

同步方法支持一种简单的策略来防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读取或写入都是通过同步方法完成的。

通俗易懂的解释

能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。

地位

代码演示:不使用并发手段的后果演示

代码实战:两个线程同时a++,最后结果会比预计的少

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

原因

count++,它看上去只是一个操作,实际上包含了三个动作:

  1. 读取count
  2. 将count加1
  3. 将count的值写入到内存中

Synchronized的两个用法

对象锁

包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对象)

代码块形式:手动指定锁对象

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

方法锁形式:synchronized修饰普通方法,锁对象默认为this

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 类锁

概念(重要):Java类可能有很多个对象,但只有1个Class对象

本质:所以所谓的类锁,不过是Class对象的锁而已

用法和效果:类锁只能在同一时刻被一个对象拥有

形式1:synchronized加载static方法上

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

形式2:synchronized(*.class)代码块

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 消失的请求解决方案

不使用并发手段会有什么后果?如何解决?

 解决问题

两个线程同时a++,最后结果会比预计的少

原因

count++,它看上去知识一个操作,实际上包含了三个动作

  1. 读取count
  2. 将count+1
  3. 将count的值写入到内存中

方法一

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 方法二

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 方法三

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

七种常见情况之123

多线程访问同步方法的7种情况

  1. 两个线程同时访问一个对象的同步方法
  2. 两个线程访问的是两个对象的同步方法
  3. 两个线程访问的是synchronized的静态方法
  4. 同时访问同步方法与非同步方法
  5. 访问同一个对象的不同的普通同步方法
  6. 同时访问静态synchronized和非静态synchronized方法
  7. 方法抛异常后,会释放锁

情况一:

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 情况二:

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 情况三:

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 情况四:

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 情况五:

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 情况六:

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

情况七:

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 7种情况总结

 3点核心思想

  1. 一把锁只能同时被一个线程获取,没有拿到锁的线程必须等待(对应第1、5种情况)
  2. 每个实例都对应有自己的一把锁,不同实例之间互不影响;例外:锁对象锁是*.class以及Synchronized修饰的是static方法的时候,所有对象共用同一把锁(对应第2、3、4、6种情况);
  3. 无论是方法正常执行完毕或者方法抛出异常,都会释放锁(对应第7种情况)

Synchronized缺陷

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

 常见面试问题

1、使用注意点:锁对象不能为空、作用域不宜过大、避免死锁

2、如何选择Lock和Synchronized关键字?

3、多线程访问同步方法的各种具体情况

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:一文看透Java高并发:Synchronized锁的性质、原理及其缺陷-创新互联
网站路径:http://www.tsicrk.com/article/isosd.html

其他资讯

让你的专属顾问为你服务

2.7124s