导航
  • 主页
  • Java SE
  • J2ME
  • Web开发
  • Java EE
  • Eclipse
  • 问答

能否实现一个通用线程池,让所有新创建的类里的所有方法都借用独立的线程进行处理?

chl 2003-05-12 11:39:14
是否能够实现呢?
...全文
26 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Erica33 2003-06-03
又看了两天书,现在线程池我已经理解的差不多了。谢谢各位的出手。。!!!!
回复
james5111 2003-06-02
呵呵呵呵。。。好久没有上来了!

可以做一个通用的线程池。
我的做法:
1。 定义线程池。(在这里创建多个等待的线程。)
2。 所有要交给线程池运行的类,必须事先Runnable 的接口。
3。 通过一个队列,将要运行的对象传送给线程池。线程池接收到该对象的时候,运行该对象中的run方法。
事实上,关于这个问题在jdk1.5中可能会增加这个功能的。那时候,我们就只要实现Runnable 接口,然后调用标准的jdk函数就可以了。(现在没有办法啊)
回复
superzrb 2003-05-31
gz
回复
Erica33 2003-05-31
to afu(阿福):
谢谢你给我的提示,我现在准备用线程池做一个服务器端的监控程序,但是java我也是刚开始学习。你说的重用线程,提高资源的效用我也有一点概念。什么是资源泄漏?我看到有书上经常有提到的,但都没有介绍!!!
这么巧老兄的朋友也叫唐唐!!!真是太好了!!!
回复
afu 2003-05-30
资源池的思路就是通过预先申请资源,从而达到资源重用的目的,以避免运行时频繁的申请释放资源所造成的低效和资源泄漏,你可以通过设置最小资源数和最大资源数调整对资源的占用情况。

这种办法就是通过组合实现多线程的。协作关系如下:

//线程池
class ThreadPool{
...
public void execute(IAsyncMethod m); //执行异步调用的方法
}

//异步调用的方法接口
interface IAsyncMethod{
public void fun(void);
}

//执行异步方法调用的对象
class anyclass implements IAsyncMethod{
...
public void fun(void);
}

//异步调用示例
anyclass a = new anyclass(...);
ThreadPool pool = new ThreadPool(...);

//异步调用 a.fun()
pool.execute(a);
回复
陈明建 2003-05-30
预先开很多线程不是很浪费资源?
有没有办法把线程封装成一个类,然后其他类通过继承或者组合就可以实现多线程的?
回复
afu 2003-05-30
to Erica33(唐唐) :
我想你没有明白为什么要用线程池? 使用线程的原因是:通过重用线程,以避免运行时频繁的申请和释放线程所造成的低效和资源泄漏。如果不考虑效率问题,你完全可以不用线程池,直接使用线程。
(另:兄台的名字好熟悉呀,好象哥哥的朋友也叫唐唐耶 *^_^* )

to chliang(拉西):
“让线程通用”可不太容易,如上例:一个函数 execute(IAsyncMethod)可以异步执行函数,但是一般情况下,该函数只能支持一种格式的函数,如果函数的定义变化了,必须重新定义IAsyncMethod,这样子很麻烦也很不透明。在C++里,可以借助于摸板技术支持不同格式的函数,但是在Java里行不通。不过,可以模仿自动化接口IDispatch的函数调用方式,把函数的所有参数都打包到一个预先定义好的结构体中,然后以该结构体为参数,传入之后再解开结构体,这样做很麻烦。
回复
Erica33 2003-05-30
线程池的问题也是我线在亟待解决的一个问题,我看了一些例子,还是没有太多的概念。是不是构造一个类,其中有一个队列来存放任务,然后用线程的对象依照一定的方法来和队列关联,然后再调用线城池中的函数。请各位高手指定!!
回复
chl 2003-05-30
谢谢,afu(阿福)
我想要的就是“让线程通用”,函数参数的打包和解包不很明白,能否说说呢?
回复
afu 2003-05-29
不是太麻烦,我用C++ 和 Java 都实现过,就是预先开很多线程,每个线程内部都是一个循环体,空闲时让它们都休眠,用的时候唤醒。
如果线程只运行某一个特定格式的函数,实现起来不难,但是如果要让线程通用,可以执行任何格式的函数,有点复杂,涉及到函数参数的打包和解包。
回复
Erica33 2003-05-29
能不能具体给一个例子?谢谢!!!!
回复
qo 2003-05-28
很复杂,weblogic容器对servlet的管理就是这样的
回复
chl 2003-05-26
up
回复
chl 2003-05-19
linxr(seaweb)
能传授点经验吗?
回复
rateng 2003-05-14
如何实现可以具体说说聊聊怎么做吗?
回复
linxr 2003-05-13
可以实现。
回复
chl 2003-05-12
upup
回复
发动态
发帖子
Java
创建于2007-09-28

4.6w+

社区成员

Java相关技术讨论
申请成为版主
社区公告
暂无公告