ThreadLocal的两种用法总结

ThreadLocal的作用

ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定的线程中可以获取到存储的数据,对于其他线程来说则无法取到数据。

ThreadLocal的主要作用

轻松实现一些看起来很复杂的功能,适合以下一些应用场景。

  • 应用场景1

某些数据是以线程为作用域并且不同线程具有不同的数据的副本时,就可以考虑用ThreadLocal

例如:Android中,Handler需要获取当前线程的Looper,很显然Looper的作用域是线程并且不同线程具有不同的Looper。

通过ThreadLocal就可以轻松实现Looper在线程中的存取。

  • 应用场景2

复杂逻辑下的对象传递,比如监听器的传递,有些时候一个线程中的任务过于复杂,我们又需要监听器能够贯穿整个线程的执行过程。

采用ThreadLocal可以让监听器作为线程内的全局对象而存在,在线程内部只要通过get方法就可以获取到监听器。

ThreadLocal的两种用法总结

ThreadLocal的两个作用总结

  • 1、让某个需要用到的对象在线程间隔离(每个线程都有自己独立的对象)
  • 2、在任何方法中都可以轻松获取到该对象
  • 3、根据共享对象的生成时机不同,选择initialValue或set来保存对象

ThreadLocal的两种用法总结

场景一:initialValue

  • 在ThreadLocal第一次get的时候把对象给初始化出来,对象的初始化时机可以由我们控制

ThreadLocal的两种用法总结

场景二:set

  • 如果需要保存到ThreadLocal里的对象的生成时机不由我们随意控制,例如拦截器生成的用户信息,用ThreadLocal.set直接放到我们的ThreadLocal中去,以便后续使用

 

相关文章:

  • 2022-12-23
  • 2021-08-08
  • 2022-12-23
  • 2021-04-20
  • 2022-12-23
  • 2022-01-08
  • 2021-04-26
  • 2021-09-09
猜你喜欢
  • 2022-12-23
  • 2021-11-16
  • 2021-11-05
  • 2021-06-27
  • 2021-10-28
  • 2021-09-03
相关资源
相似解决方案