当前位置: 首页 > 面试题库 >

java.lang.OutOfMemoryError:无法创建新的本机线程

公英哲
2023-03-14
问题内容

我看到这样的评论

我见过这个问题的一个地方是,如果您继续创建线程,而不是直接在线程对象上调用run(),而不是调用start()。这将导致线程对象不被取消引用…因此,一段时间后,出现无法创建新本机线程的消息

在Sun Java论坛上

在我的应用程序中,最初我们计划使用线程,但是后来,我们决定不再需要线程,因此我们只调用run()而不是start()。我们是否需要为新的threadClass(..)做手动GC?

我的tomcat启动设置

-Xms1024m -Xmx1024m -XX:MaxPermSize=450m

问题答案:

为什么首先创建一个Thread

您的代码应Runnable改为实现接口。

然后,当您决定要在线程中运行它时,可以简单地实例化一个ThreadRunnable作为参数,并调用start()Thread对象。

相反,如果您只想在当前线程中运行它,则只需调用run()您的Runnable对象即可。

这有几个优点:

  • 您不涉及任何Thread对象,只要您不关心单独的线程
  • 您的代码包装在一个Runnable从概念上更适合的方式中:您不是在编写某种特殊的线程,对吗?您只需编写一些可以执行/运行的代码。
  • 您可以轻松地使用Executor,进一步简化决策

最后但并非最不重要的一点是,您可以避免在是否创建本机线程资源方面造成任何潜在的混淆。



 类似资料: