use*_*621 7 java multithreading
我正在使用线程池来完成我的任务.完成每个任务后,我正在使用Thread.stop()和销毁线程Thread.destroy().但在运行我的应用程序(在Eclipse中)大约30分钟后.我得到一个内存越界错误.
请建议我如何杀死线程.
Jon*_*eet 14
如果您正在使用线程池,则不应该终止该线程 - 线程池的重点是重用线程.
如果您不想重用该线程,那么只需启动一个新线程而不是使用线程池 - 然后让线程死掉,而不是调用stop或destroy.这些方法已经被弃用了 - 基本上不应该调用它们.
现在还不是很清楚这会导致内存不足的例外 - 你有没有理由把重点放在线程上作为可能的原因?
为了强化@Jon Skeet所说的,调用已弃用的Thread.stop()或Thread.destroy()方法是一个非常糟糕的想法.
根据javadoc,Thread.destroy()基本上是危险的,从未实施过.最初的想法只是杀死线程并打破其所有的监视器锁定.如果它恰好处于更新共享数据结构的中间,则数据结构将处于不确定状态.等待被杀死的线程通知某个对象的其他线程将等待.
Thread.stop()导致ThreadDeath异常在意外(对于被命中的代码)处引发.它比杀死一个线程更有序,但是除非所有停止的线程(包括它调用的任何东西)都是用finally块来仔细写入来通知服务员,恢复数据结构等,否则你会遇到同样的问题.
有关整个故事,请参阅Java Thread Primitive Deprecation.
| 归档时间: |
|
| 查看次数: |
18610 次 |
| 最近记录: |