精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-08
避免这些问题的办法是, 直接实现API call 所需要的接口。 一般情况下, 不能为了方便, 损失很多时间。 需要Runnable的目的就是为了有个启动的入口, 没有任何别的含义, 如果看到这点, 我相信你不会直接从Thread类实现需要的代码。 在继承使用某些系统级的API上, 我一般都比较小心, JAVA的很多API有陷阱存在的, 很多API的都仅仅是sun.* 的一个类的包装, 并没有真的实现功能。JAVA的API实现中大量使用了Adaper/Proxy的设计模式。 曾经吃过不少亏。
|
|
返回顶楼 | |
发表时间: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个以上的线程池,当打印线程堆栈信息的时候,分不清线程是属于哪个线程池的,不直观。只能看调用的栈来推测。 |
|
返回顶楼 | |
发表时间:2008-11-22
puroc 写道 虽然Thread是实现Runnable接口。但是不要直接用线程池去执行Thread。你可以用findbugs查一下,当你传的是一个Thread的时候,findbugs会报一个黄色的警告,提示你不要这样做,否则会有无法预料的错误。我们公司有一个项目组,他们就是把Thread传到线程池执行的,就为了给这个线程起一个名字,因为用线程池的话,好像没有办法给线程起名字。结果他们遇到过这样一个问题,明明已经加入到线程池中了,但是却没有执行(线程池队列没满)。 顺便问一下,如何给一个线程池,或者线程池中的线程起名字。我的系统中使用了2个以上的线程池,当打印线程堆栈信息的时候,分不清线程是属于哪个线程池的,不直观。只能看调用的栈来推测。 定制ThreadFactory |
|
返回顶楼 | |
发表时间:2008-11-23
dennis_zane 写道 puroc 写道 虽然Thread是实现Runnable接口。但是不要直接用线程池去执行Thread。你可以用findbugs查一下,当你传的是一个Thread的时候,findbugs会报一个黄色的警告,提示你不要这样做,否则会有无法预料的错误。我们公司有一个项目组,他们就是把Thread传到线程池执行的,就为了给这个线程起一个名字,因为用线程池的话,好像没有办法给线程起名字。结果他们遇到过这样一个问题,明明已经加入到线程池中了,但是却没有执行(线程池队列没满)。 顺便问一下,如何给一个线程池,或者线程池中的线程起名字。我的系统中使用了2个以上的线程池,当打印线程堆栈信息的时候,分不清线程是属于哪个线程池的,不直观。只能看调用的栈来推测。 定制ThreadFactory 我上次用ThreadFactory搞了一会,没搞出来。还得仔细看看。 |
|
返回顶楼 | |