
类锁

2种用法

作用

七种情况

类锁

synchronized 修饰的为静态方法时就升级成了一个类锁~

不同的实例之间互斥

类锁的几种形势

代码块锁需要手动制定锁,方法锁只需要加修饰关键字
1.对象锁:

两个用法

原理就是通过锁机制,线程拿到锁,使用完后,释放锁,另一线程拿到锁后才可以使用。
第一个用法:

用法

为什么i的值不同?

以上3步并不是原子的(原子的不可分割)。
实践:

Synchronized地位:

synchronized的作用:

官方解释:


i++是线程不安全的:
i++ 这里分成了三部(所以不是原子性)
读取i的值
计算i+1
把i+1的计算结果写回内存中赋给i
缺陷111111111

缺陷111111111

同步11111111

synchronized性质:
可重入:指的是同一线程的外层函数获得锁之后,内层函数可以直接再次获取锁。
好处:避免死锁,提升封装性
不可中断:一旦这个锁已经被别人获得了,如果我还想获得,我只能选择等待或阻塞,直到别的线程释放这个锁。如果别人永远不释放锁,那么我只能永远地等下去。
1、两个线程同时访问一个对象的同步方法:一个一个执行。(加锁成功可以起到保护作用和同步效果)
2、两个线程访问的是两个对象的同步方法:同时执行。(没有起到保护作用和同步效果)
3、两个线程访问的是synchronized的静态方法:一个一个执行。
4、同时访问同步方法与非同步方法:同时执行。
5、访问同一个对象的不同的普通同步方法:一个一个执行。
6、同时访问静态synchronized和非静态synchronized方法:同时执行。
7、方法抛出异常后,会释放锁:会。
锁的特性
1. 可重入 好处:避免死锁 提高封装特性
2. 不可中断
可重原理,加锁计数
反编译看字节码