通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中):
应用程序创建一个长时间运行的线程(或者使用线程池,会更快地发生内存泄露)。线程通过某个类加载器(可以自定义)加载一个类。该类分配了大块内存(比如new byte[1000000]),在某个静态变量存储一个强引用,然后在ThreadLocal中存储它自身的引用。分配额外的内存new byte[1000...
分类:
编程语言 时间:
2014-10-09 16:23:58
阅读次数:
221
ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 ThreadLocal,顾名思义,它不是一个线程,而是线程的一个本地化对象...
分类:
其他好文 时间:
2014-09-30 11:29:19
阅读次数:
190
线程内的共享数据:原则 ---方法,表达式或者是模块,当他们在同一线程上运行,他们访问同一变量,应该访问的是同一数据。将数据与线程绑定到一起。换句话说,我线程内的事在我的线程内完成,不受其他线程的影响。线程内共享同一数据对象。即在线程内共享,在线程外独立。...
分类:
编程语言 时间:
2014-09-24 15:53:27
阅读次数:
234
理论: 临界资源 PV操作:通过信号量机制进行维护关系资源的安全---看看操作系统.... 任务对资源进行操作,为了安全要加锁,锁加载临界资源操作上(也就是对共享资源的操作) 加锁 共享资源操作 解锁编程模型: 1.通过锁 2.threadLocal 3....
分类:
编程语言 时间:
2014-09-23 23:51:35
阅读次数:
296
The web application [/struts2_0100] created a ThreadLocal with key of type (2011-11-17 16:44:30)严重: The web application [/struts2_0100] created a Thre...
分类:
其他好文 时间:
2014-09-21 14:09:20
阅读次数:
237
在多线程开发中,经常会遇见在run方法里面调用一个公共的属性的事情,由于每次start都会创建一个线程,因此所有的线程共享一个属性,当其中任何一个线程更改了这个属性的值,这个属性在下面的使用过程中都会被改变,这回导致很多不期望发生的事情发生,这就叫做线程不安全的。先来一个例子说明这个问题。
package com.bird.concursey;
import java.util.Date;...
分类:
编程语言 时间:
2014-09-16 22:13:51
阅读次数:
374
ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发性。
对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提...
分类:
编程语言 时间:
2014-09-14 12:53:47
阅读次数:
207
一. 前言:
在上一篇博文中, 我们使用TransactionManager和ThreadLocal完成线程安全的事务管理,不知大家有没有发现,AccountService代码充斥着很多事务处理的代码,其实这些代码在很多方法里面都是重复出现,我们可以使用Template模式进行优化。...
分类:
编程语言 时间:
2014-09-12 13:30:53
阅读次数:
288
一. 为什么使用ThreadLocal:
在上一篇博文中, 我们通过传递Connection的方式来控制事务, 这种方法可以达到目的, 但让人看的不爽,
如果涉及到调用多个service, 那我是不是还得从controller层传递Connection?...
分类:
编程语言 时间:
2014-09-12 01:17:32
阅读次数:
253