面试题答案
一键面试常见应用场景
- 计数器:在多线程环境下统计任务执行次数、访问量等。例如,一个Web应用程序统计页面的总访问次数,多个线程同时处理访问请求,可使用AtomicInteger作为计数器。
- 并发控制:如控制线程执行的顺序,或用于实现简单的锁机制。假设一个场景,多个线程竞争执行一段代码,使用AtomicInteger可以控制每次只有一个线程进入临界区。
- 资源分配:在多线程环境下管理共享资源的分配计数。比如在连接池管理中,统计已分配的连接数和可用连接数。
相较于传统变量的优势
- 原子性:原子变量的操作是原子的,无需额外的同步机制(如
synchronized
关键字)即可保证在多线程环境下操作的完整性。而传统变量在多线程并发访问和修改时,可能会出现数据不一致问题。例如,对于传统的int
变量,如果多个线程同时执行i++
操作,由于i++
实际包含读取、加一、写入三个步骤,在多线程下可能会导致结果错误;而AtomicInteger的incrementAndGet
方法能保证原子性,结果准确。 - 性能:由于原子变量无需使用重量级的锁机制(如
synchronized
带来的线程阻塞与唤醒开销),在高并发场景下,其性能优于使用传统变量结合锁机制实现相同功能。原子变量通常采用无锁算法,通过硬件级别的CAS(Compare - and - Swap)操作来实现,减少了线程上下文切换和竞争带来的开销。