Spring如何处理线程并发问题?
工具/原料
Spring
方法/步骤
1
1.在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本,SimpleThreadLocal方法代码:
2
2.通过一个具体的实例了解一下ThreadLocal的具体使用方法SequenceNumber 方法代码:
3
3.TestClient线程产生一组序列号,在③处,我们生成3个TestClient,它们共享同一个SequenceNumber实例。运行以上代码,在控制台上输出以下的结果:
4
4.非线程安全的变量以ThreadLocal存放,在同一次请求响应的调用线程中,所有关联的对象引用到的都是同一个变量,通过实例能够体现Spring对有状态Bean的改造思路。
5
5.因为addTopic()方法是非线程安全的,必须在使用时创建一个新TopicDao实例(非singleton)。使用ThreadLocal保存Connection变量方法代码
6
6.从ThreadLocal中获取线程对应的Connection方法代码