java 各种锁

根据可见性划分-内置锁和显示锁:

         synchronize:放在进入方法加锁,出方法释放锁。锁的获取和释放是JVM管理不,不需要手动管理。通信方式为wait(),notify()

           lock:需要程序员手动获取锁(lock.lock());手动释放锁:lock.unlock()。通信方式为condition

根据锁的级别划分-轻量锁和重量锁:

            轻量锁:通过CAS算法进行实现,最大限度降低开销,提升线程性能。

            重量锁:我的理解是整个过程只对单一线程可见,其余线程争锁进入阻塞状态。

根据锁的使用环境划分-乐观锁和悲观锁:

             乐观锁:默认认为所有或绝大多数都是读,少有或没有写入操作。假定不会发生并发冲突

             悲观锁:默认为所有或绝大多数都是写,少有或没有读。假定会发生并发冲突。

根据是否可重复获取锁-重入锁和不可重入锁:

             重入锁:一个线程获取一个锁去访问锁内的代码块,第二个线程还可以继续获取该锁去访问该代码块其他方法。

            不可重入锁:一个线程进入锁代码块不能访问另个锁代码块,必须等待第一个锁代码块释放锁之后方可访问第二个锁代码块。

根据同步级别-读写锁和互斥锁:

              读写锁:允许多个线程同时读写;当一个线程写时其他读的线程必须等待,同理当线程在写时,其他写线程必须等待。

              互斥锁:严格按照某种顺序来操作,过程中仅允许一个线程进行顺序操作(不是资源的顺序)。

猜你喜欢

转载自blog.csdn.net/qq_28834183/article/details/80437136