当前位置:  开发笔记 > 编程语言 > 正文

当我在Thread对象上调用run()时,为什么我的Java程序会泄漏内存?

如何解决《当我在Thread对象上调用run()时,为什么我的Java程序会泄漏内存?》经验,为你挑选了1个好方法。

(危险的问题,我希望当我遇到这个问题时答案已经在线)

使用Java 1.4,我有一个方法,我想在某些时候作为一个线程运行,但不是在其他人.所以我将它声明为Thread的子类,然后根据我的需要调用start()或run().

但我发现我的程序会随着时间的推移泄漏内存.我究竟做错了什么?



1> slim..:

这是Java 1.4中的一个已知错误:http://bugs.sun.com/bugdatabase/view_bug.do; jsessionid = 5886e03fee226ffffffffc40d4fa881a86e3: WuuT?bug_id = 4533087

它已在Java 1.5中修复,但Sun并不打算在1.4中修复它.

问题是,在构造时,a Thread被添加到内部线程表中的引用列表中.在start()方法完成之前,它不会从该列表中删除.只要该引用存在,就不会收集垃圾.

所以,永远不要创建一个线程,除非你肯定会调用它的start()方法.一个Thread对象的run()方法,不应该被直接调用.

编写代码的更好方法是实现Runnable接口而不是子类Thread.当您不需要线程时,请致电

myRunnable.run();

当你需要一个线程时:

Thread myThread = new Thread(myRunnable);
myThread.start();

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有