【问题标题】:Is it thread safe to declare own methods in a HttpServlet? [duplicate]在 HttpServlet 中声明自己的方法是线程安全的吗? [复制]
【发布时间】:2016-12-03 01:06:34
【问题描述】:

我有一个 servlet,它获取数据然后将其持久化。这是一个粗略的sn-p:

@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);
}

【问题讨论】:

标签: java multithreading servlets cdi


【解决方案1】:

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

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

你可以参考这些问题:

Regarding thread safety of servlet

Why Servlets are not thread Safe?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多