### 多线程
> 当多个线程在操作同一个共享变量时,就有可能发生安全问题。 ——Java并发编程实战
>
> (如果只是读取,不算是操作)
- `synchronized`同步代码块:并行变成了串行(其实就是多线程变成了单线程),同时多了判断的过程(拿锁,还锁,判断锁),效率降低了
- 同步方法没有同步代码块好,同步代码块更加灵活,可以控制锁的范围,只锁需要锁的部分
- 同步方法:
- 静态方法:对象是`类名.class`
- 非静态方法:对象是this
- Lock锁被称为显式锁,synchronized被称为隐式锁,Lock锁性能更优。synchronized是`JVM`层面上的
- `wait()`和`notify()`必须要用锁对象来进行调用
- sleep不会释放锁
- wait会释放锁,这样wait期间执行权就可以被其它线程抢走 |
|