【转】线程问题引起的内存泄露

转自:http://liubin.nanshapo.com/2010/12/28/memory-leak-for-the-thread/

 

最近解决的一个内存泄露,竟然是由于线程问题引起的

看看下面代码,如何?

1 new Thread(new Runnable() {
2             public void run() {
3                 MessagingNotification.updateSendFailedNotificationForThread(ComposeMessageActivity.this, threadId);
4             }
5      }).run();

 

有什么问题吗?

对,这段代码生成了一个thread的对象,竟然调用了run方法,这引起了内存泄露。
必须改为start才行。

而run方法,只是调用了Runnable的run方法而已:
// Thread.class

1 public void run() {
2     if (target != null) {
3         target.run();
4     }
5 }

 

而start方法则不同

低版本的java有这个问题,不知道为什么Android2.2还有这个问题:
http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=5869e03fee226ffffffffc40d4fa881a86e3:WuuT?bug_id=4533087

按上面说法,生产一个Thread对象,会在构造器调用init方法,这个方法会把线程加入到一个group里,而从group里删除实在exit方法里做的,如果只调用run,这个exit方法则不会被调用。

结论就是如果用Thread,尽量都用start()
myThread = new Thread(myRunnable);
myThread.start();

如果是Runnable,可以用run
myRunnable.run()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值