ThreadLocal在哪些具体的生产环境中应用最为合适?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4105个文字,预计阅读时间需要17分钟。
在常规业务开发中,ThreadLocal有两大典型应用场景:场景1:ThreadLocal + 使用保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己拥有的副本,而不会影响到其他线程。
在通常的业务开发中,ThreadLocal有两种典型的使用场景
场景1,ThreadLocal 用作保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己所拥有的副本, 而不会影响其他线程的副本,确保线程安全
场景2,ThreadLocal 用作每个线程内需要独立保存信息,以便供其他方法更方便地获取该信息的场景。每个线程获取到的信息可能都是不一样的,前面执行的方法保存了信息后,后续方法可以通过 ThreadLocal 直接获取到,避免了传参,类似于全局变量的概念
典型场景1
这种场景通常用于保存线程不安全的工具类,典型的需要使用的类就是SimpleDateFormat
场景介绍
在这种情况下,每个 Thread 内都有自己的实例副本,且该副本只能由当前 Thread 访问到并使用,相当于每个线程内部的本地变量,这也是 ThreadLocal 命名的含义。因为每个线程独享副本,而不是公用的,所以不存在多线程间共享的问题
SimpleDateFormat 的进化之路
- 2 个线程都要用到 SimpleDateFormat
假设有个需求,即2 个线程都要用到 SimpleDateFormat。
本文共计4105个文字,预计阅读时间需要17分钟。
在常规业务开发中,ThreadLocal有两大典型应用场景:场景1:ThreadLocal + 使用保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己拥有的副本,而不会影响到其他线程。
在通常的业务开发中,ThreadLocal有两种典型的使用场景
场景1,ThreadLocal 用作保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己所拥有的副本, 而不会影响其他线程的副本,确保线程安全
场景2,ThreadLocal 用作每个线程内需要独立保存信息,以便供其他方法更方便地获取该信息的场景。每个线程获取到的信息可能都是不一样的,前面执行的方法保存了信息后,后续方法可以通过 ThreadLocal 直接获取到,避免了传参,类似于全局变量的概念
典型场景1
这种场景通常用于保存线程不安全的工具类,典型的需要使用的类就是SimpleDateFormat
场景介绍
在这种情况下,每个 Thread 内都有自己的实例副本,且该副本只能由当前 Thread 访问到并使用,相当于每个线程内部的本地变量,这也是 ThreadLocal 命名的含义。因为每个线程独享副本,而不是公用的,所以不存在多线程间共享的问题
SimpleDateFormat 的进化之路
- 2 个线程都要用到 SimpleDateFormat
假设有个需求,即2 个线程都要用到 SimpleDateFormat。

