-
i++是线程不安全的:
i++ 这里分成了三部(所以不是原子性)
读取i的值
计算i+1
把i+1的计算结果写回内存中赋给i
查看全部 -
synchronized性质:
可重入:指的是同一线程的外层函数获得锁之后,内层函数可以直接再次获取锁。
好处:避免死锁,提升封装性
不可中断:一旦这个锁已经被别人获得了,如果我还想获得,我只能选择等待或阻塞,直到别的线程释放这个锁。如果别人永远不释放锁,那么我只能永远地等下去。
查看全部 -
锁的特性
1. 可重入 好处:避免死锁 提高封装特性
2. 不可中断
查看全部 -
缺陷
效率低
锁的释放场景少:正常执行完毕、异常抛出。
试图获取锁时不能设定超时,只能一直等。
不能中断一个正在试图获得锁的线程。
不够灵活
加锁放锁的时机的单一,相比之下读写锁更灵活。
无法知道结果
获取锁成功没?
查看全部 -
对象锁
方法锁:this,即当前实例对象
同步代码块锁:自己制定锁
类锁
静态方法锁:类对象
查看全部 -
只有一个Class对象:Java类可能会有很多个对象,但是只有1个Class对象。
查看全部 -
Synchronized的作用:能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。
查看全部 -
JVM会自动通过使用monitor来加锁和解锁,保证了同时只有一个线程可以执行指定代码,从而保证了线程安全,同时具有可重入和不可中断的性质。
查看全部 -
1.效率问题 2.看业务,优先考虑synchronized(简单) 3.主要判断被锁的对象
查看全部 -
直到等于0时,那个锁才算是彻底释放了
查看全部 -
Synchronized编译后,会生成monitorenter-加锁,monitorexit释放锁
查看全部 -
答案:1.先后 2.同时 3.先后 4.同时 5.先后 6.同时 7.会
查看全部 -
本课程的知识点回顾
查看全部 -
1、读写锁:读的时候可以多线程执行
2、将synchronized替换为lock
查看全部 -
synchronized的缺陷:效率低、不够灵活、不知道是否成功获取了锁
查看全部
举报