024--Java中的各种锁和CAS+面试题

VIP免费
2024-12-11 1 0 19.95KB 6 页 5.9玖币
侵权投诉
Java 中的各种锁和 CAS + 面试题
如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为
我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一。因此下面
就让我们一起深入地学习一下这些锁吧。
乐观锁和悲观锁
“ ”悲观锁和乐观锁并不是某个具体的 锁 而是一种并发编程的基本概念。乐观锁和悲观锁最
早出现在数据库的设计当中,后来逐渐被 Java 的并发包所引入。
悲观锁
悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为
修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观地认为,不加锁的
并发操作一定会出问题。
乐观锁
乐观锁正好和悲观锁相反,它获取数据的时候,并不担心数据被修改,每次获取数据的时
候也不会加锁,只是在更新数据的时候,通过判断现有的数据是否和原数据一致来判断数
据是否被其他线程操作,如果没被其他线程修改则进行数据更新,如果被其他线程修改则
不进行数据更新。
公平锁和非公平锁
根据线程获取锁的抢占机制,锁又可以分为公平锁和非公平锁。
公平锁
公平锁是指多个线程按照申请锁的顺序来获取锁。
非公平锁
非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先
申请的线程优先获取锁。
ReentrantLock 提供了公平锁和非公平锁的实现。
公平锁:new ReentrantLock(true)
非公平锁:new ReentrantLock(false)
如果构造函数不传任何参数的时候,默认提供的是非公平锁。
独占锁和共享锁
根据锁能否被多个线程持有,可以把锁分为独占锁和共享锁。
独占锁
独占锁是指任何时候都只有一个线程能执行资源操作。
共享锁
共享锁指定是可以同时被多个线程读取,但只能被一个线程修改。比如 Java 中的
ReentrantReadWriteLock 就是共享锁的实现方式,它允许一个线程进行写操作,允许多
个线程读操作。
ReentrantReadWriteLock 共享锁演示代码如下:
public class ReadWriteLockTest {
public static void main(String[] args) throws InterruptedException {
final MyReadWriteLock rwLock = new MyReadWriteLock();
// 创建读锁 r1 r2
Thread r1 = new Thread(new Runnable() {
@Override
public void run() {
rwLock.read();
}
}, "r1");
Thread r2 = new Thread(new Runnable() {
@Override
public void run() {
rwLock.read();
}
}, "r2");
r1.start();
r2.start();
// 等待同时读取线程执行完成
r1.join();
r2.join();
// 开启写锁的操作
new Thread(new Runnable() {
@Override
public void run() {
rwLock.write();
}
}, "w1").start();
new Thread(new Runnable() {
@Override
public void run() {
rwLock.write();
}
}, "w2").start();
}
static class MyReadWriteLock {
ReadWriteLock lock = new ReentrantReadWriteLock();
public void read() {
try {
lock.readLock().lock();
System.out.println(" 读操作,进入 | 线程:" +
Thread.currentThread().getName());
摘要:

Java中的各种锁和CAS+面试题如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一。因此下面就让我们一起深入地学习一下这些锁吧。乐观锁和悲观锁“”悲观锁和乐观锁并不是某个具体的锁而是一种并发编程的基本概念。乐观锁和悲观锁最早出现在数据库的设计当中,后来逐渐被Java的并发包所引入。悲观锁悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观地认为,不加锁的并发操作一定会出问题。乐观锁乐观锁正好和悲观锁相反,它获取...

展开>> 收起<<
024--Java中的各种锁和CAS+面试题.docx

共6页,预览2页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!

相关推荐

分类:计算机 价格:5.9玖币 属性:6 页 大小:19.95KB 格式:DOCX 时间:2024-12-11

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 6
客服
关注