微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

怎么销毁java中的线程呢?

时间:2014-04-10 09:49  浏览:努力统计中...
怎么才能销毁java中的线程呢?我进行多线程访问服务器的操作,每次假如创建5条线程,访问服务器结束之后,会再次的创建线程,久而久之,我访问服务器的数据很多的时候,就会跟着
怎么才能销毁java中的线程呢?我进行多线程访问服务器的操作,每次假如创建5条线程,访问服务器结束之后,会再次的创建线程,久而久之,我访问服务器的数据很多的时候,就会跟着创建很多的线程,造成了内存溢出,我该怎么销毁线程呢?从而使内存不会溢出?
java自带的线程池,似乎也有这个问题啊,我现在遇到的是不知道是因为内存溢出了,还是Executors自己的问题,造成软件运行一段时间后不能创建新的线程了

不明觉厉

把线程 置为 null  GC 就可以回收了。


这个要咋整

是不是设置null 

线程在结束之后如果不用会被自动销毁;
或者可以看看Executor

线程用完会自动收回,你自己控制一下创建线程的频率,不要让同时运行的线程过多

为啥要自行销毁? run() 函数执行完,线程就没了。如果只是线程对象所占的那点内存,跟对象释放是一样的 = null 就等着GC回收了。


最后建议是:你的场景用线程池更合适,让线程池自己去管理,你只管往里面增加任务就好了。

线程运行完毕会自动销毁啊。

我的job,一天会生成500个线程,都是自己销毁的。

你的问题可能不在线程这里,要么就是线程中打开了文件,连接了数据库而没有释放资源导致的


我试过用线程池,不知道为何,运行了一段时间之后,就会不运行了

+1
线程对象也是new出来的,GC可以回收,线程池可以指定最大线程数

All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method. 

以上是api的说明。


我试过用线程池,不知道为何,运行了一段时间之后,就会不运行了
那只说明一个问题,你的任务中有引用外部资源,并且你的资源没有被正常释放,造成你的任务永远不能结束

5楼正解 
run完之后 会自动 销毁
可以看看线程的机制

我可不可以这样理解,程序第一次创建了5个线程,当其中一个线程结束后又自动创建5个,这个时候应该就有9个线程了吧。当肯会溢出的啊,这等于每次都会多4个线程。如果是5个线程都结束了,然后再创建5个。理论上,一开始不会溢出,以后都不会。

如果没有用线程池,那么线程执行完任务,就会结束,等待垃圾回收啊,lz说的销毁是中断吗?



说明程序存在问题,也许是死锁、死循环、所依赖资源被锁死(比如数据库死锁了)、无限等待外部响应(没有设置超时)等。

建议用调试模式执行,当发现“就会不运行了”的时候,暂停整个进程,然后观察各线程都停在什么位置了,然后再单步走一走看看死循环在什么地方了。
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线------