文章目录
一.内置锁
Java提供了一种内置的锁机制来支持原子性
和可见性
:同步代码块(Synchronized Block)
。
synchronized的原理有两个:
- 内置锁
- 互斥锁
Java的内置锁:每个java对象
都可以用做一个实现同步的锁,这些锁称为内置锁(Intrinsic Lock)
或者监视器锁(Monitor Lock)
。线程进入同步代码块或方法
的时候会自动获得该锁
,并且在退出同步代码块时(正常返回,或者是异常退出)会自动释放锁
。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。
- 而Java的内置锁又是一个互斥锁,这就是意味着
最多只有一个线程能够获得该锁
,当线程B尝试去获得线程A持有的内置锁时,线程B必须等待(WAITING)或者阻塞(BLOCKED)
,直到线程A释放这个锁,如果A线程不释放这个锁,那么B线程将永远等待下去。
同步代码块以关键字synchronized
修饰,例如:
synchronized(锁对象引用&