Java面试题总结 - Java多线程篇(附答案)

目录

一、线程的run()和start()有什么区别?

二、为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?

三、Synchronized 用过吗,其原理是什么?

四、JVM 对 Java 的原生锁做了哪些优化?

五、为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?

六、Java 如何实现多线程之间的通讯和协作?

七、Thread 类中的 yield 方法有什么作用?

八、为什么说 Synchronized 是非公平锁?

九、请谈谈 volatile 有什么特点,为什么它能保证变量对所有线程的可见性?

十、为什么说 Synchronized 是一个悲观锁?乐观锁的实现原理又是什么?什么是 CAS,它有什么特性?

十一、乐观锁一定就是好的吗?

十二、请尽可能详尽地对比下 Synchronized 和 ReentrantLock 的异同。

十三、ReentrantLock 是如何实现可重入性的?

十四、什么是锁消除和锁粗化?

十五、跟 Synchronized 相比,可重入锁 ReentrantLock 其实现原理有什么不同?

十六、那么请谈谈 AQS 框架是怎么回事儿?

十七、AQS 对资源的共享方式?

十八、如何让 Java 的线程彼此同步?

十九、你了解过哪些同步器?请分别介绍下。

二十、Java 中的线程池是如何实现的

二十一、创建线程池的几个核心构造参数

二十二、线程池中的线程是怎么创建的?是一开始就随着线程池的启动创建好的吗?

二十三、volatile 关键字的作用

二十四、既然 volatile 能够保证线程间的变量可见性,是不是就意味着基于 volatile 变量的运算就是并发安全的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值