40道 Java 多线程面试题(带答案,持续更新版)
发布网友
发布时间:2024-10-17 18:37
我来回答
共1个回答
热心网友
时间:2024-12-11 23:30
这篇文章总结了多线程问题,列出40个相关问题及其答案,强调理解多线程原理与应用的重要性。以下是对几个关键问题的深入分析:
1. 多线程有什么用?多线程可以发挥多核CPU优势,防止阻塞,提高程序运行效率。
2. 创建线程的方式?主要有继承Thread类或实现Runnable接口,后者更灵活,减少耦合度。
3. start()方法和run()方法的区别?调用start()方法启动线程,run()方法则执行线程任务,前者使线程同时执行。
4. Runnable接口和Callable接口的区别?Runnable接口仅执行run()方法,无返回值;Callable接口支持异步执行,返回结果。
5. CyclicBarrier和CountDownLatch的区别?CyclicBarrier让所有线程到达同一点后重新开始,CountDownLatch则让某线程到达后继续执行。
6. volatile关键字的作用?保证多线程下变量可见性,禁止指令重排序,结合CAS保证原子性。
7. 线程安全的含义?线程安全的代码在多线程环境下执行结果与单线程一致,不同级别如不可变、绝对线程安全、相对线程安全、线程非安全。
8. 如何获取线程mp文件?通过jps和jstack命令获取线程堆栈信息,用于调试。
9. 线程出现运行时异常?未被捕获时,线程停止,持有对象监视器立即释放。
10. 在线程间共享数据?通过共享对象和wait/notify机制实现。
11. sleep方法和wait方法的区别?sleep放弃CPU时间但不放弃监视器,wait放弃监视器。
12. 生产者消费者模型?通过平衡生产与消费能力提升效率,实现解耦。
13. ThreadLocal的作用?用于线程间数据隔离,不共享。
14. wait()方法和notify()/notifyAll()方法调用条件?需先获得对象锁。
15. wait()方法与notify()方法在释放监视器的区别?wait()立即释放,notify()等待剩余代码执行完毕释放。
16. 为什么使用线程池?避免频繁创建销毁线程,控制并发数。
17. 检测线程持有监视器?通过Thread类的holdsLock()方法判断。
18. synchronized与ReentrantLock的区别?synchronized是关键字,ReentrantLock是类,后者提供更多特性。
19. ConcurrentHashMap的并发度?默认16,最多同时16条线程操作。
20. ReadWriteLock的作用?读写分离,读锁共享,写锁独占,提升读写性能。
文章后续会继续整理剩余的面试题,并分享给Java程序员。