Java面试题之多线程 什么是乐观锁和悲观锁
在多线程编程中,乐观锁和悲观锁是两种不同的并发控制策略,用于处理多个线程对共享资源的访问。
悲观锁是一种假设会发生冲突的锁策略。在使用悲观锁时,线程在访问共享资源之前会先获取锁,确保在访问期间没有其他线程可以访问该资源。悲观锁通常会导致线程阻塞,直到锁被释放。
特点:
实现方式:
在Java中,悲观锁可以通过synchronized
关键字或ReentrantLock
类来实现。
乐观锁是一种假设不会发生冲突的锁策略。在使用乐观锁时,线程在访问共享资源时不会立即获取锁,而是先进行操作,最后在提交时检查是否有其他线程对资源进行了修改。如果没有修改,则提交成功;如果有修改,则需要重试。
特点:
实现方式:
在Java中,乐观锁通常通过版本号(Version)或时间戳(Timestamp)来实现。例如,使用AtomicInteger
类或java.util.concurrent
包中的其他原子类。
选择使用乐观锁还是悲观锁,通常取决于具体的应用场景和对性能与一致性的需求。