Java高并发常见面试题
时间: 2024-07-10 12:00:50 浏览: 64
在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`则提供了对任务执行结果的访问和状态检查。