【问题标题】:Is it a good way to use Timer in Java EE在 Java EE 中使用 Timer 是一种好方法吗
【发布时间】:2013-11-22 14:52:57
【问题描述】:

在 HTTP 发布请求之后,我有一个任务要在后台执行, 所以我可以在 Java7 EE 中这样做吗? (他们说 Java7 EE 可以使用 JSE 并发)。所以这是我的代码:

@POST public String contactMe( @FormParam("name") String name, @FormParam("email") String email, @FormParam("website") String website, @FormParam("message") String message) {
    System.out.println("you have sent name " + name + "  email  " + email + "  website " + website + "   message " + message);



    /*methode Timer*/
    Timer timer = new Timer();
    MyTimerTask myTimerTask=new MyTimerTask();
    timer.schedule(myTimerTask,10000);
    //I have to do something n back ground that take 10 seconds at least


    return "<h1>DONE</h1>";
}

我很困惑,在企业界可能有更好的方法来处理这类问题,因为内存管理与桌面应用程序不同。 提前致谢。

【问题讨论】:

    标签: multithreading jakarta-ee jax-rs glassfish-4


    【解决方案1】:

    终于,我得到了答案,我对 JEE7 多线程工具很满意:

     @Stateless
     public class ReportBean {
     @Resource  
     private ManagedThreadFactory threadFactory;
     public void runReports() {
     Thread thread = threadFactory.newThread(new Runnable());
     thread.start();
     }
    

    我在工作中使用过这个 bean... Java EE7 提供了一种使用由 Web 容器而不是 JVM 管理的 JAVA SE 的新方法。

    【讨论】:

    • 看起来这个例子是从这个post复制过来的
    【解决方案2】:

    您的计时器的用途是什么?

    您的代码收到一些 GET 信息,然后等待 10 秒,然后开始执行 myTimerTask。

    编辑:

    进一步检查您的帖子后:您似乎想同步执行任务;如果确实如此,只需执行 timertask。

    但是您的评论表明您希望在后台执行任务,但我不明白为什么您似乎暗示您要等待 10 秒。

    【讨论】:

    • 感谢您在 10 月 10 日了解我的反馈。好吧,我的 TumerTask 很好地发送了一些电子邮件并存储在数据库中并创建了一些文件,所以...可能需要超过 10 秒...我不希望客户一直等待得到他的响应 200 OK 。我想要它同步。但我的问题是:如果我在我的 JEE 应用程序中使用一些 JSE 线程工具可以吗,就像那样,或者可能是通过使用另一个 -> new Thread(r).start();服务器是否管理我隐式创建的线程。还是我应该使用一些 EJB 工具?
    • 如果是这种情况,只需按照此处所述启动一个单独的线程:docs.oracle.com/javase/tutorial/essential/concurrency/…。但是,您不想让用户知道他们的请求是否成功吗?
    • 我知道如果是异步的我会使用@Suspended AsyncResponse asyncResponse,但我想要它同步的方式。感谢 javaSE 的链接,但是您确定真的建议在 JEE 框架中使用本机线程吗?如何检查在 JEE 中使用简单线程是否没有问题?
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2011-03-25
    • 2017-06-14
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多