up:: ThreadLocal第二种使用场景

说明:

(1) 在【ThreadLocal第一种使用场景】和【ThreadLocal第二种使用场景】这两篇博客,我们演示了ThreadLocal的两种使用场景;本篇博客,我们尝试总结一下ThreadLocal的作用和好处;

(2)声明: 对于本篇博客的内容,没必要太认真;ThreadLocal还是需要在实际应用中,才能更好的加深理解;


一:ThreadLocal的两个作用;

说明:

(1) 第一个作用:

● 第一种使用场景中的体现:

通过,其执行效果,可以发现,不同线程都有各自的SimpleDateFormat对象;

● 第二种使用场景中的体现:

通过,其执行效果,可以发现,不同线程都有各自的当前线程中的任务的信息;

(2) 第二个作用:

● 第一种使用场景中的体现:

● 第二种使用场景中的体现:


二:由【对象生成的时机,的不同】,来分析ThreadLocal两种不同的使用场景;

(1)ThreadLocal第一种使用场景:使用initialValue()的方式,来把对象保存到ThreadLocal中;

● 在初始化ThreadLocal(这儿具体来说就是ThreadSafeFormatter类)的时候,就已经把SimpleDateFormat对象给初始化进ThreadLocal中了;

● 但需要明白,ThreadSafeFormatter类中初始化SimpleDateFormat的代码是我们编写的;即,是我们规定,在初始化ThreadSafeFormatter类的时候,就把SimpleDateFormat对象给初始化进ThreadLocal中;如果我们不编写这条语句,其自然在初始化ThreadSafeFormatter类的时候,就不会SimpleDateFormat对象给初始化进ThreadLocal中;

● 即,在第一种场景中,对象的创建时机是由我们控制的;

(2)ThreadLocal第二种使用场景:使用set()的方式,来把对象保存到ThreadLocal中;

● 场景二中,在ThreadLocal类中,我们创建了holder;这个holder一旦创建了,其就会是一直等待的状态;等待数据被存进来;而,究竟什么时候存进来,不是有UserContextHolder这个ThreadLocal类决定的,而是由Service1决定的;


三:使用ThreadLocal带来的好处;