synchronized学习--慕课网

1、synchronized关键字的作用

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

2、synchronized的两个用法

对象锁:包括同步方法和同步代码块。

类锁:synchronized修饰的静态的方法或指定锁为class对象。

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

(1)两个线程同时访问一个对象的同步方法:串行执行(一个一个的执行)。

(2)两个线程访问的是两个对象的同步方法:并行执行。

(3)两个线程访问的是synchronized修饰的静态方法:串行执行。

(4)同时访问同步方法和非同步方法:并行执行,sysynchronized只作用于修饰的方法,对其他方法无影响。

(5)访问同一个对象的不同的普通同步方法:串行执行。

(6)同时访问静态的同步方法和非静态的同步方法:并行执行。

(7)方法抛异常后,会释放锁。

7种情况的3个核心思想:

(1)一把锁只能同时被一个线程获取,没拿到锁的线程必须等待。(1,5)

(2)每个实例都对应有自己的一把锁,不同实例直接互不影响,类锁例外(2,3,4,6)

(3)方法正常执行完毕或抛出异常,都会释放锁。(7)

4、synchronized锁的性质:

(1)可重入:同一线程的外层函数获得锁之后,内层函数可以直接再次获取该锁。也叫递归锁。好处:避免死锁,提升封装性。

粒度:线程而非调度。(1)同一个方法是可重入的,(2)可重入不要求是同一个方法。(3)可重入不要求是同一个类中的。

(2)不可中断:如果一个锁被其他线程获得,如果我想获得该锁,只能等待或阻塞,直到其他线程释放该锁。

5、加锁和释放锁的原理

时机:内置锁。

javap xxx.class查看字节码文件。

加锁:monitorenter,释放锁:moniterexit

6、可重入原理:加锁次数技术器

JVM负责跟着对象被加锁的次数。

线程第一次给对象加锁时,计数变为1,每当这个相同的线程再此对象锁再次获得锁时,计数会递增。

每当任务离开时,技术会递减,当计数为0时,锁被完全释放。

7、可见性原理

synchronized加锁时,从主内存读取数据,操作完成后,释放锁之前,将数据从本地内存写会到主内存。

8、Synchronized的三个缺陷

(1)效率低,锁的释放情况少,试图获得锁时不能设定超时,不能中断一个试图获得锁的线程。

(2)不够灵活,读的话可能不需要加锁。加锁和释放的时机单一。

(3)无法判断状态,释放获取到锁。

9、synchronized使用注意点:锁对象不能为空(因为锁的信息包含在对象头中的),作用域不宜过大,避免死锁。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值