在HttpServlet中声明自己的方法是否安全?

时间:2016-07-28 14:46:42

标签: java multithreading servlets cdi

我有一个获取数据的servlet然后继续存在。这是一个粗略的片段:

@WebServlet("/ListenerServlet")
public class ListenerServlet extends HttpServlet {

    @Inject
    private PersistService service;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    String toPersist = getDataFromRequest();
    service.persist(toPersist);
}

我的问题

  • 可以通过CDI注入(requestScoped)服务吗?
  • 我可以在servlet中创建自己的(非静态)方法并且是线程安全的吗?我需要synchronized关键字吗?

自己的方法:

private void doPersist(String toPersist) {
    service.persist(toPersist);
}

1 个答案:

答案 0 :(得分:0)

拥有自己的方法绝对没问题 - 只要它们也是线程安全的。注入PersistService是将后备存储放入servlet的好方法,但PersistService也是线程安全的仍然很重要。例如,如果您在该类中有一个静态EntityManager,那么线程安全,没有一些额外的同步。但是如果你以线程安全的方式进行持久化,那么你应该没问题。

一般来说,你使用的模式是我多次使用过的模式并且效果很好。

您可以参考以下问题:

Regarding thread safety of servlet

Why Servlets are not thread Safe?

If my Servlet instance variable is of type StringBuffer, is it thread-safe?