面试java并发~(lock、volatile、cas)

简介: 面试java并发~(lock、volatile、cas)

Lock 锁

是一个接口,有三个实现类,分别是常用的可重入锁,读锁、写锁。

常用的可重入锁,默认一般创建的是非公平锁,就是允许线程插队,而不是按先来后到顺序。

非公平锁的目的:是为了更加公平。

lock 加锁,调用的是 lock() 方法,解锁,调用 unlock() 方法。


lock 锁 和 Synchronized 的区别:

1、Synchronized 是一个关键字,修饰符,而 lock 是一个 接口,有具体的实现类

2、因为Synchronized 是一个关键字,它无法判断锁的状态,而lock 可以判断是否拿到锁;

还有 Synchronized 也无法中断线程的执行,而lock 可以通过设置中断。

3、Synchronized 会自动释放锁,而 lock 必须手动释放锁,否则会死锁。

4、在生产者-消费者模型的问题上,和Synchronized 比较, lock 可以做到更加精准的通知

线程通信(生产者、消费者):判断等待、业务、通知

syn:加锁,直接添加到方法上,调用this.wait() 等待; this.notifyAll() 通知;

lock: 需要 condition, condition.await(); condition.signlAll()


Volatile

保证可见性、禁止指令重排、但是不保证原子性

原子性问题的解决:可以使用原子类,比如整型,可以使用AtomicInteger

原子类的底层实现是 Unsafe 类,是和操作系统挂钩

volatile可以避免指令重排: 内存屏障



CAS

底层也是使用了Unsafe 类

比较当前线程的工作内存中的值和主内存中的值,如果这个值是期望的,那么则执行操作!如果不是就 一直循环!(涉及到自旋锁思想)

缺点:

循环会耗时

ABA问题

解决ABA 问题,引入原子引用! 对应的思想:乐观锁

即添加一个版本号

目录
相关文章
|
6天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
20 2
|
11天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
16天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
12天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
38 4
|
9天前
|
存储 缓存 Java
大厂面试高频:Volatile 的实现原理 ( 图文详解 )
本文详解Volatile的实现原理(大厂面试高频,建议收藏),涵盖Java内存模型、可见性和有序性,以及Volatile的工作机制和源码案例。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Volatile 的实现原理 ( 图文详解 )
|
13天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
54 4
|
16天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
42 4
|
23天前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
14 0
|
11天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。