代码之家  ›  专栏  ›  技术社区  ›  LiorH

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

  •  116
  • LiorH  · 技术社区  · 17 年前

    关于JavaEE开发,我学到的第一件事是,我不应该在JavaEE容器中生成自己的线程。但是当我想起来的时候,我不知道原因。

    我确信大多数企业应用程序都需要一些异步作业,如邮件守护进程、空闲会话、清理作业等。

    9 回复  |  直到 11 年前
        1
  •  85
  •   Community Mohan Dere    9 年前

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

    The commonj WorkManager is common for WebSphere and WebLogic as well as others

    More info here

    And here

    this one 从今天早上开始

    更新:请注意,这个问题和答案与2009年JavaEE的状态有关,自那以后情况有所改善!

        2
  •  34
  •   Dan Dyer    17 年前

    specification :

    企业bean不能使用线程 同步原语到 实例。

    和

    管理线程。企业 bean不得尝试启动、停止、, 企业bean不能尝试 管理线程组。

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

        3
  •  13
  •   asgs    11 年前

    这就是引入J2EE1.4定时器服务的原因。看见 this 详细信息请参阅文章。

        4
  •  10
  •   Community Mohan Dere    9 年前
        5
  •  3
  •   Arne Burmeister    14 年前

    Quarz 具有 Spring 在一个没有问题的webapp中。还有并发框架 java.util.concurrent deamon 或者为它们使用自己的deamon线程组,以便容器可以随时卸载您的webapp。

    但是要小心,豆子的作用域 一场 和 要求 ThreadLocal 如果无法立即运行,则需要自己将值传输到生成的线程。

        6
  •  2
  •   Thorbjørn Ravn Andersen    17 年前

    遵守规则。有一天你会很高兴的:)

        7
  •  2
  •   Ojitha    15 年前

    根据蓝图,Java EE容器中禁止使用线程。请参阅 blueprints

        8
  •  1
  •   levand    17 年前

    我从来没有读过这是不鼓励的,除非是因为它不容易正确地做。

    它是相当低级的编程,和其他低级技术一样,您应该有一个很好的理由。大多数并发问题可以通过使用内置结构(如线程池)更有效地解决。

        9
  •  1
  •   Javamann    17 年前