摘要: ThreadLocal的目的就是为每一个使用ThreadLocal的线程都提供一个值,让该值和使用它的线程绑定,当然每一个线程都可以独立地改变它绑定的值。如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal,这将极大地简化你的程序. 关于的ThreadLocal更多内容,请参考《Thr 阅读全文
posted @ 2017-11-23 20:16 有梦就能实现 阅读(262) 评论(0) 推荐(0)
摘要: 这篇文章,主要解决一下疑惑: 1. ThreadLocal.ThreadLocalMap中提到的弱引用,弱引用究竟会不会被回收? 2. 弱引用什么情况下回收? 3. JAVA的ThreadLocal和在什么情况下会内存泄露? 带着这些疑问,自己模拟了一下ThreadLocal.ThreadLocal 阅读全文
posted @ 2017-11-23 20:13 有梦就能实现 阅读(197) 评论(0) 推荐(0)
摘要: 前言 ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析 ThreadLocal 内存泄漏的问题 Threa 阅读全文
posted @ 2017-11-23 19:59 有梦就能实现 阅读(336) 评论(0) 推荐(1)
摘要: 在我很多的课程里(master、concurrency、xj-conc-j8),我经常提起ThreadLocal。它经常受到我严厉的指责要尽可能的避免使用。ThreadLocal是为了那些使用完就销毁的线程设计的。线程生成之前,线程内的局部变量都会被清除掉。实际上,如果你读过 Why 0x61c88 阅读全文
posted @ 2017-11-23 19:51 有梦就能实现 阅读(2186) 评论(0) 推荐(0)
摘要: 线程池中的线程是重复使用的,即一次使用完后,会被重新放回线程池,可被重新分配使用。 因此,ThreadLocal线程变量,如果保存的信息只是针对一次请求的,放回线程池之前需要清空这些Threadlocal变量的值(或者取得线程之后,首先清空这些Threadlocal变量的值)。 阅读全文
posted @ 2017-11-23 19:44 有梦就能实现 阅读(424) 评论(0) 推荐(0)
摘要: ThreadLocal对象帮助我们管理线程内的对象,保证对象在线程之间是相互隔离的。 今天碰到的坑是这样的: index01.html页面加载的时候会发送一次a请求,然后点击附件上传的时候会发送上传请求b,上传成功后会发送下载请求c, 其中a请求会经过interceptor01拦截器,interce 阅读全文
posted @ 2017-11-23 19:42 有梦就能实现 阅读(651) 评论(0) 推荐(0)
摘要: threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好的做法是将调用threadlocal的remove方法. 在threadlocal的生命周期中,都存 阅读全文
posted @ 2017-11-23 19:39 有梦就能实现 阅读(294) 评论(0) 推荐(0)
摘要: ThreadLocal的几种误区 最近由于需要用到ThreadLocal,在网上搜索了一些相关资料,发现对ThreadLocal经常会有下面几种误解 一、ThreadLocal是java线程的一个实现 ThreadLocal的确是和java线程有关,不过它并不是java线程的一个实现,它只是用来维护 阅读全文
posted @ 2017-11-23 18:56 有梦就能实现 阅读(1842) 评论(0) 推荐(0)
摘要: 使用ThreadLocal并且有线程池时要特别注意,ThreadLocal是以线程为key的,而线程池里面的线程是会被重新利用的,所以如果有使用线程池并且使用ThreadLocal来保存状态信息时要特别注意要每次初始化,否则同一个线程会用到之前线程的状态信息,代码见http://www.macroh 阅读全文
posted @ 2017-11-23 18:52 有梦就能实现 阅读(511) 评论(0) 推荐(0)
摘要: 最近遇到一个比较隐蔽而又简单地问题,在使用ThreadLocal时发现出现多个线程中值串来串去,排查一番,确定问题为线程池的问题,线程池中的线程是会重复利用的,而ThreadLocal是用线程来做Key的所以在使用线程池的时候要特别注意ThreadLocal. ThreadLocal数据是在线程创建 阅读全文
posted @ 2017-11-23 18:51 有梦就能实现 阅读(782) 评论(0) 推荐(0)
摘要: ThreadLocal使用 ThreadLocal可以让线程拥有本地变量,在web环境中,为了方便代码解耦,我们通常用它来保存上下文信息,然后用一个util类提供访问入口,从controller层到service层可以很方便的获取上下文。下面我们通过代码来研究一下ThreadLocal。 新建一个T 阅读全文
posted @ 2017-11-23 18:49 有梦就能实现 阅读(2082) 评论(0) 推荐(0)
摘要: 这两天一直在查无线app一个诡异的问题,表象是stg的接口返回数据,和线上接口的返回数据不一致。 1、初步判断:有缓存,查看代码后发现缓存时间直邮6分钟,而且同一个接口,其他调用方的返回数据,stg和线上是保持一致的。 2、确认版本后,把线上版本和stg环境的版本号,进行多次check,发现版本是一 阅读全文
posted @ 2017-11-23 18:44 有梦就能实现 阅读(1529) 评论(0) 推荐(0)
摘要: 转载 2014年10月24日 22:33:29 标签: <!-- [startarticletags]--> <!-- [endarticletags]--> 328 <!-- <li><button class="btn-noborder but-comment-topicon"><i class 阅读全文
posted @ 2017-11-23 17:29 有梦就能实现 阅读(1702) 评论(0) 推荐(0)
摘要: 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。正是由于这个特 点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息。例如在某个服务器程序中,该服务器的配置信息可能存放在数据库或 文件中,这些配 阅读全文
posted @ 2017-11-23 09:37 有梦就能实现 阅读(952) 评论(0) 推荐(0)
摘要: 近来参与一个Java的web办公系统,碰到一个bug,开始猜测是线程池管理的问题,最后发现是单例模式的问题。 即,当同时发起两个事务请求时,当一个事务完成后,另一个事务会抛出session is closed异常。具体见下图: 1 至于,下面这种情况,当时也测试过,但问题情形忘了,手上没有数据库环境,无法进行测试: image 最开始,个人认为是session管理的问题,比如,在关闭s... 阅读全文
posted @ 2017-11-23 09:30 有梦就能实现 阅读(260) 评论(0) 推荐(0)