面试题答案
一键面试性能瓶颈具体表现
- 高竞争导致线程阻塞:在高并发环境下,多个线程同时访问
Hashtable
时,由于其使用了synchronized
关键字对所有公共方法进行同步,这意味着同一时间只能有一个线程执行这些方法,其他线程必须等待锁的释放。大量线程等待锁会导致线程频繁阻塞和唤醒,增加了上下文切换的开销,严重影响性能。 - 吞吐量降低:由于线程阻塞,系统整体的吞吐量会大幅下降。即使系统中有多个CPU核心,也无法充分利用多核的并行处理能力,因为线程被串行化执行。
底层原理分析
- 全表锁机制:
Hashtable
的底层是数组加链表结构(JDK 1.7及之前)。它对所有的关键操作如put
、get
、remove
等方法都使用synchronized
进行同步,相当于对整个Hashtable
对象加了一把锁。这就导致无论操作哪个元素,都需要获取这把全局锁,限制了并发访问的能力。 - 锁粒度大:这种全局锁的方式使得锁的粒度非常大,不能对不同的桶(bucket)进行并行操作。例如,当一个线程在操作某个桶中的元素时,其他线程即使想操作不同桶中的元素也会被阻塞,无法充分利用系统资源进行并行处理,从而产生性能瓶颈。