Lio*_*orH 118 java multithreading java-ee
我学到的关于Java EE开发的第一件事就是我不应该在Java EE容器中生成我自己的线程.但是当我开始思考它时,我不知道原因.
你能清楚地解释为什么气馁吗?
我相信大多数企业应用程序都需要某种异步工作,如邮件守护进程,空闲会话,清理工作等.
因此,如果确实不应该生成线程,那么在需要时执行它的正确方法是什么?
Rob*_*bin 84
不鼓励使用,因为服务器要管理并可能监视环境中的所有资源.此外,正在使用线程的大部分上下文通常附加到执行线程本身.如果您只是启动自己的线程(我相信某些服务器甚至不允许),它就无法访问其他资源.这意味着,您无法获取InitialContext并执行JNDI查找以访问其他系统资源,例如JMS连接工厂和数据源.
有很多方法可以"正确"执行此操作,但这取决于所使用的平台.
commonj WorkManager对于WebSphere和WebLogic以及其他人来说很常见
也有些重复这个从今天上午
更新:请注意,这个问题和答案与2009年的Java EE状态有关,从那时起情况有所改善!
Dan*_*yer 34
对于EJB,它不仅是气馁的,而且明确禁止规范:
企业bean不得使用线程同步原语来同步多个实例的执行.
和
企业bean不得尝试管理线程.企业bean不得尝试启动,停止,暂停或恢复线程,或更改线程的优先级或名称.企业bean不得尝试管理线程组.
原因是EJB旨在在分布式环境中运行.EJB可能会从群集中的一台计算机移动到另一台计算机.线程(以及套接字和其他受限设施)是这种可移植性的重大障碍.
kgi*_*kis 13
您不应该生成自己的线程的原因是容器不会管理这些线程.容器会处理很多新手开发人员难以想象的事情.例如,容器执行线程池,群集,崩溃恢复等操作.当你开始一个线程时,你可能会失去一些.此外,容器还允许您重新启动应用程序,而不会影响它运行的JVM.如果容器的控件中有线程,这怎么可能呢?
这就是引入J2EE 1.4计时器服务的原因.请参见本文章的详细信息.
现在有一种使用核心Java EE API创建线程的标准且正确的方法:
通过使用Concurrency Utils,您可以确保创建新线程并由容器管理,从而确保所有EE服务都可用.
这里的例子
归档时间: |
|
查看次数: |
50724 次 |
最近记录: |