论坛首页 Java企业应用论坛

无法回帖啊,,再关于线程误用导致内存泄露的问题

浏览 12230 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-08  
避免这些问题的办法是, 直接实现API call 所需要的接口。 一般情况下, 不能为了方便, 损失很多时间。 需要Runnable的目的就是为了有个启动的入口, 没有任何别的含义, 如果看到这点, 我相信你不会直接从Thread类实现需要的代码。 在继承使用某些系统级的API上, 我一般都比较小心, JAVA的很多API有陷阱存在的, 很多API的都仅仅是sun.* 的一个类的包装, 并没有真的实现功能。JAVA的API实现中大量使用了Adaper/Proxy的设计模式。 曾经吃过不少亏。
0 请登录后投票
   发表时间:2008-11-22  
wangdi 写道
sdh5724 写道
LZ,还是把线程的概念想清楚了, 再来问吧。 Thread和Runnable 这2个东西的区别在那儿你不知道的话, 估计你很难明白。

    pooledExecutor.execute(new MyThread()); 

执行是什么, 要看清楚, 为什么泄露我不知道, 但是, pooledExecutor接受的Runnable的接口, 不使用THREAD接口吧?


呵呵,兄台大意了,JDK 1.4源码:
public class Thread implements Runnable 

也就是说:Thread也是Runnable


虽然Thread是实现Runnable接口。但是不要直接用线程池去执行Thread。你可以用findbugs查一下,当你传的是一个Thread的时候,findbugs会报一个黄色的警告,提示你不要这样做,否则会有无法预料的错误。我们公司有一个项目组,他们就是把Thread传到线程池执行的,就为了给这个线程起一个名字,因为用线程池的话,好像没有办法给线程起名字。结果他们遇到过这样一个问题,明明已经加入到线程池中了,但是却没有执行(线程池队列没满)。

顺便问一下,如何给一个线程池,或者线程池中的线程起名字。我的系统中使用了2个以上的线程池,当打印线程堆栈信息的时候,分不清线程是属于哪个线程池的,不直观。只能看调用的栈来推测。
0 请登录后投票
   发表时间:2008-11-22  
puroc 写道

虽然Thread是实现Runnable接口。但是不要直接用线程池去执行Thread。你可以用findbugs查一下,当你传的是一个Thread的时候,findbugs会报一个黄色的警告,提示你不要这样做,否则会有无法预料的错误。我们公司有一个项目组,他们就是把Thread传到线程池执行的,就为了给这个线程起一个名字,因为用线程池的话,好像没有办法给线程起名字。结果他们遇到过这样一个问题,明明已经加入到线程池中了,但是却没有执行(线程池队列没满)。

顺便问一下,如何给一个线程池,或者线程池中的线程起名字。我的系统中使用了2个以上的线程池,当打印线程堆栈信息的时候,分不清线程是属于哪个线程池的,不直观。只能看调用的栈来推测。


定制ThreadFactory
0 请登录后投票
   发表时间:2008-11-23  
dennis_zane 写道
puroc 写道

虽然Thread是实现Runnable接口。但是不要直接用线程池去执行Thread。你可以用findbugs查一下,当你传的是一个Thread的时候,findbugs会报一个黄色的警告,提示你不要这样做,否则会有无法预料的错误。我们公司有一个项目组,他们就是把Thread传到线程池执行的,就为了给这个线程起一个名字,因为用线程池的话,好像没有办法给线程起名字。结果他们遇到过这样一个问题,明明已经加入到线程池中了,但是却没有执行(线程池队列没满)。

顺便问一下,如何给一个线程池,或者线程池中的线程起名字。我的系统中使用了2个以上的线程池,当打印线程堆栈信息的时候,分不清线程是属于哪个线程池的,不直观。只能看调用的栈来推测。


定制ThreadFactory


我上次用ThreadFactory搞了一会,没搞出来。还得仔细看看。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics