`
gzcj
  • 浏览: 285927 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程中使用静态方法

阅读更多

终于把内存泄漏问题解决了,不是多线程访问静态函数的问题,事实证明只要在静态函数中没有处理多线程共享数据,就不存在着多线程访问同一个静态方法会出现资源冲突的问题,如果在静态方法中有访问多线程共享数据,就要小心多线程同步问题。

同时,在使用线程池进行开发时,要特别注意线程实例的资源释放问题,不要想当然的认为没有创建变量名来引用所创建的线程实例,线程在运行完就会自动释放资源,事实证明并没有释放。如果没有显示创建变量名引用线程实例,系统会自动创建一个隐藏变量来应用这个实例,会造成线程池运行完线程后依然没有释放资源的问题。

下面是我进行内存泄漏分析后的结果。

项目中使用了EDU.oswego.cs.dl.util.concurrent的线程池进行开发,使用线程池运行线程 ProcessThread 。
public class ProcessThread implements Runnable{ 略}

如果就这样使用线程池运行线程会造成严重的内存泄漏问题:
ThreadPool.getInstance().execute( new ProcessThread(messages[i]) );

代码更改后(如下所示),暂时就没有发现内存泄漏了
ProcessThread thread = new ProcessThread(messages[i]);
ThreadPool.getInstance().execute( thread );
thread = null;

分享到:
评论
1 楼 zhangcctao 2011-09-27  
我也遇到线程池的内存溢出问题。。
不知道是不是这个原因呀?

相关推荐

Global site tag (gtag.js) - Google Analytics