欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java多线程的锁机制

程序员文章站 2022-05-04 18:19:01
...

源于蚂蚁课堂的学习,点击这里查看(老余很给力) 

悲观锁和乐观锁

悲观锁:
    只要进行操作就会对当前的操作上锁,即悲观的认为此次操作可能会出现线程安全,故主动加锁处理。
    如:sync和lock

乐观锁:
    不会对数据上锁,而且通过将实际的数据与预期的数据进行比较,查到后做数据的变动。
    如:cas机制、数据库表的version

 

阻塞和非阻塞

阻塞:
    会产生线程等待问题,当持有锁的线程处理数据时,其他线程想要访问这个数据,只能等锁的释放。

非阻塞:
    不会线程等待,在线程访问数据时,通过值的比较去判断操作是否可行,期间其他线程可以做其他事情,也可以
自旋重试。

 

sync

重量级锁,即会产生线程等待,也是一种悲观锁,具有可重入性(同一个对象的多个方法之间可传递)、可见性和原子性。
由于其会阻塞线程,故效率较低

 

lock

需要我们手动控制锁的创建、使用和释放,是一种轻量级锁、悲观锁

其中lock锁支持:
可重入锁 ReentrantLock 锁的传递
读写锁 ReentrantReadWriteLock

 

cas无锁机制 

一种乐观锁,本质上不会锁定对象,而是通过本地内存(也就是工作内存)中存放全局变量副本数据的值与主内存的数据值比较,
相同的话,去做数据的更新,不同的话,会将主内存的值刷新至本地内存,再次去请求比较,直到成功,即自旋

 

原子类 

atomic类,底层都是采用乐观锁CAS机制去实现线程安全控制的

java多线程的锁机制

 

相关标签: 多线程