欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

ThreadLocal 的原理讲述 + 基于ThreadLocal实现MVC中的M层的事务控制,以前总听别人说,坚持

来源: javaer 分享于  点击 18658 次 点评:68

ThreadLocal 的原理讲述 + 基于ThreadLocal实现MVC中的M层的事务控制,以前总听别人说,坚持


ThreadLocal 的原理讲述 + 基于ThreadLocal实现MVC中的M层的事务控制

目录
  • ThreadLocal 的原理讲述 + 基于ThreadLocal实现MVC中的M层的事务控制
  • 每博一文案
  • 1. ThreadLocal 给概述
  • 2. 抛砖引玉——>ThreadLocal
  • 3. ThreadLocal 的模拟编写
  • 4. ThreadLocal 源码原理分析
    • 5. ThreadLocal 常用方法
      • 5.1 ThreadLocal的set()方法
      • 5.2 ThreadLocal的get( )方法
      • 5.3 ThreadLocal的remove( )方法
      • 5.4 ThreadLocal 的 initialValue( )方法
  • 6. ThreadLocal 注意移除数据
  • 7. ThreadLocal 内存泄漏
  • 8. 正确的使用ThreadLocal
  • 9. ThreadLocal 常见使用场景
  • 10. 案例:MVC三层架构 + 面向接口编程 + ThreadLocal 事务处理实:现用户转账功能的优化
    • 10.1 M(Model 模型层/业务逻辑处理层)
    • 10.2 C(Controller 控制层)
    • 10.3 V(View 显示层)
      • 10.4 测试
  • 11. ThreadLocal与Synchronized的区别
  • 12. ThreadLocal与Thread,ThreadLocalMap之间的关系
  • 13. 总结:
  • 14. 最后:

每博一文案

生活不是努力了就可以变好的,喜欢做的事情也不是轻易就可以做的。以前总听别人说,
坚持就好了,努力就好了,都会好的,可是真的做起来压根就不是这样。这种时候要怎么办?
这种时候还能轻易地相信时间吗?
我总是一时间不知道怎么回答:直到今天我决定记录这些日子的生活时,直到我写完以上的文字时,我
脑海里才出现了一个清晰的答案。四个字:尽力而为。
我想这样的。世事无常,分道扬镳,生老病死,我们常常没法得偿所愿。
然而我们都必须尽力而为。
我觉得挺好的:把眼前的事情做好就行了,路都是走着走着才知道能走到哪里的。
越是焦虑,就越是要回到生活里去。因为身处迷雾中本就很难找到方向,能看见的也就
眼前的五米,那就五米五米地一步步走下去。
至于路能走成什么样,又能走去哪里......
走着走着,就都知道了。
但或许其实终点到底是哪里也不是那么重要。
重要的是,我们走了很远的路,最终找到的人,是我们自己。
是哪个可以很好地应对挫折,应对痛苦,应对生活的变故的自己。
是那个依然前行,依然努力,依然能够为了小事而欣喜,为了善良而感动的自己。
是那个终于学会了珍惜的自己,是那个不再害怕平方的自己。
生活如河,自己就是自己的船。

                            ——————卢思浩《你也走了,很远的路吧》

1. ThreadLocal 给概述

ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程 ,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:

  • 因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。
  • 既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题

ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal 变量通常被private static修饰。当一个线程结束时,它所使用的所有 ThreadLocal 相对的实例副本都可被回收。

  • 这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量
  • 在线程的生命周期内起作用,可以减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度

总的来说,ThreadLocal 适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景

下图可以增强理解:

2. 抛砖引玉——>ThreadLocal

从上述一篇文章中:我们运用 MVC的架构模式——> 实现了用户转账的功能:

相关栏目:

用户点评