内容来自《Java Web 程序员面试笔试宝典》

【出现频率】★★☆☆☆ 【学习难度】★★☆☆☆

答案:同步机制与ThreadLocal都是解决线程并发问题的方法,但是同步机制并发量越大,对系统性能的影响越大。Spring使用ThreadLocal来解决线程安全问题。ThreadLocal 能为每一个线程提供一个独立的变量副本,可以把多线程环境下不安全的变量封装到ThreadLocal,从而隔离了多线程对数据的访问冲突,保证了线程内部的变量安全。

一般情况下,无状态的Bean在多线程环境下共享才是安全的。在Spring中,绝大部分Bean都可以声明为singleton作用域,是因为Spring对一些Bean(如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等)的非线程安全状态采用ThreadLocal进行处理,让它们也成为线程安全的状态,因此有状态的Bean就可以在多线程中使用了。