JAVA锁机制常见面试题

本文探讨了Java中的锁机制,包括synchronized与Lock的区别,synchronized的底层实现和优化,volatile关键字的作用,以及CAS和AQS原理。同时介绍了乐观锁、悲观锁、互斥锁和共享锁的概念,强调了可重入锁的重要性,并讨论了读写锁在并发控制中的作用。
摘要由CSDN通过智能技术生成

synchronized与Lock的区别?

  • synchronied 是关键字, Lock 是接口
  • synchronied可以修饰方法,代码块,Lock只能修饰代码块
  • synchronized自动加锁解锁,lock 需要手动加锁解锁
  • synchronied产生死锁不能主动释放锁,死锁无法解决,Lock有unLock()方法可以解锁,发生死锁后可以解决

synchronized锁的底层实现机制?

synchronized使用的锁对象类型存储在Jvm对象头里的标记字段中,处于那种锁状态由jvm结构中标志位决定: 无锁:001 偏向锁: 101 自旋锁 00 重量级锁10。synchronied根据线程竞争程度分为:无锁、偏向锁、自旋锁、重量级锁 jdk1.6之前只有重量级锁。

为什么会有可见性问题:多线程操作内同一变量是,不同线程是在自己的工作内存进行变量的操作,在处理结束后同步到主存中。

为什么会有乱序问题: 指令重排序是编译器和处理器为了高效对程序进行优化的手段,它只能保证程序执行的结果时正确的,但是无法保证程序的操作顺序与代码顺序一致。

volatile关键字:

volati

Java中,高并发面试题通常关注线程安全、并发控制、锁机制、多线程设计模式和性能优化等内容。以下是一些常见的面试问题: 1. **什么是线程安全?** - 线程安全是指多个线程同时访问共享资源时,不会出现数据不一致或程序行为不可预测的情况。 2. **Java中哪些集合类是线程安全的?** - Java集合框架中的`ConcurrentHashMap`、`CopyOnWriteArrayList`、`CopyOnWriteArraySet`等是线程安全的。 3. **什么是`synchronized`关键字?** - `synchronized`用于同步代码块或方法,防止多个线程同时执行,保证了对共享资源的互斥访问。 4. **区别`synchronized`和`ReentrantLock`?** - `synchronized`更简单直接,但没有提供的粒度控制;`ReentrantLock`提供了更多的灵活性,比如可中断和公平。 5. **什么是阻塞队列?** - 如`BlockingQueue`,如`ConcurrentLinkedQueue`、`ArrayBlockingQueue`等,它们在并发场景下用于任务的生产和消费。 6. **`volatile`关键字的作用是什么?** - 它保证了多线程环境下的可见性和内存一致性,尤其在变量可能被多个线程修改的情况下。 7. **什么是死?如何避免死?** - 死是指两个或多个线程相互等待对方释放资源而造成的一种僵局。避免方法包括避免循环等待资源、设置超时等。 8. **什么是线程池?** - 线程池可以复用已有线程,控制并发数,提高系统性能和资源利用率。 9. **Spring框架中的`@Async`是什么?** - Spring的异步处理注解,用于将任务提交给后台执行,避免阻塞主线程。 10. **`ExecutorService`和`Future`接口的区别?** - `ExecutorService`负责执行任务,`Future`则提供了对任务执行结果的访问和状态检查。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值