为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不鼓励在JavaEE容器中生成线程?

为什么不鼓励在JavaEE容器中生成线程?

慕斯709654 2019-06-24 11:14:23
为什么不鼓励在JavaEE容器中生成线程?关于JavaEE开发,我学到的第一件事是,我不应该在JavaEE容器中生成自己的线程。但当我想起来的时候,我不知道原因。你能清楚地解释一下为什么不鼓励它吗?我确信大多数企业应用程序都需要一些异步作业,如邮件守护进程、空闲会话、清理作业等。所以,如果一个人确实不应该产生线程,那么在需要的时候,有什么正确的方法去做呢?
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

这是不允许的,因为环境中的所有资源都是由服务器来管理和监视的。此外,使用线程的大部分上下文通常都附加到执行线程本身。如果您只是启动自己的线程(我相信有些服务器甚至不允许),它就无法访问其他资源。这意味着您无法获得InitialContext并执行JNDI查找来访问其他系统资源,例如JMS连接工厂和数据资源。

有一些方法可以“正确”地做到这一点,但它取决于所使用的平台。


查看完整回答
反对 回复 2019-06-24
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

对于EJB来说,这不仅是不鼓励的,而且是被规格:

企业bean不能使用线程同步原语来同步多个实例的执行。

企业bean不能试图管理线程。企业bean不能尝试启动、停止、挂起或恢复线程,或更改线程的优先级或名称。企业bean不能试图管理线程组。

原因是EJB应该在分布式环境中运行。EJB可以从集群中的一台计算机移动到另一台机器。线程(以及套接字和其他受限的工具)是这种可移植性的重要障碍。


查看完整回答
反对 回复 2019-06-24
?
白板的微信

TA贡献1883条经验 获得超3个赞

您不应该生成自己的线程的原因是这些线程不会由容器管理。容器处理了许多新手开发人员很难想象的事情。例如,线程池、集群、崩溃恢复等都由容器执行。当您启动线程时,您可能会丢失其中的一些。此外,容器允许您重新启动应用程序,而不会影响它运行的JVM。如果有不受容器控制的线程,这是怎么可能的?

这就是从J2EE1.4计时器服务引入的原因。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 482 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信