Java 如何初始化这个信号量

Java 如何初始化这个信号量,java,servlets,static,semaphore,Java,Servlets,Static,Semaphore,我问过这个关于servlet中的多线程的问题,很多人建议使用静态变量 如果我设置了一个静态变量,我需要初始化它。例如,公共静态信号量许可证 首先,我尝试在与servlet关联的过滤器的init()方法中初始化它: public void init(FilterConfig conf) throws ServletException { // TODO Auto-generated method stub try{ limit = Integer.p

我问过这个关于servlet中的多线程的问题,很多人建议使用静态变量

如果我设置了一个静态变量,我需要初始化它。例如,公共静态信号量许可证

首先,我尝试在与servlet关联的过滤器的init()方法中初始化它:

public void init(FilterConfig conf) throws ServletException {
        // TODO Auto-generated method stub
    try{
            limit = Integer.parseInt(conf.getInitParameter("filterLimit"));
            permits = new Semaphore(limit);
    }catch(Exception ex){
            conf.getServletContext().log("Fail to set the parameter : permits.");
            throw new ServletException(ex.getMessage());
    }   


}
然后我想,有这么多线程,每个执行init()方法的线程都会初始化信号量,它应该不工作

然后我尝试使用静态初始值设定项:

static{
        try{
            limit = Integer.parseInt(conf.getInitParameter("filterLimit"));
            permits = new Semaphore(limit);
        }catch(Exception ex){
            conf.getServletContext().log("Fail to set the parameter : permits.");
            throw new ServletException(ex.getMessage());
        }

 }

但是我不能使用conf对象,因为它是从init()方法传递的。我想从web.xml获取限制号,而不是硬编码。有没有办法解决这个问题?

只需在初始化之前检查null限制。

只需在初始化之前检查null限制

然后我想,有这么多线程,每个执行init()方法的线程都会初始化信号量,它应该不工作

我不明白。Servlet容器应该只调用一次init()方法。您如何使用这些过滤器/servlet?线程是在servlet内部创建的,还是在servlet外部创建的

如果它是在servlet内部创建的,那么可以使用init()方法中创建的变量

然后我想,有这么多线程,每个执行init()方法的线程都会初始化信号量,它应该不工作

我不明白。Servlet容器应该只调用一次init()方法。您如何使用这些过滤器/servlet?线程是在servlet内部创建的,还是在servlet外部创建的


如果它是在servlet内部创建的,那么可以使用init()方法中创建的变量。

可能我想得太多了。可能我想得太多了。并非每个线程都调用
init()
方法。在servlet实例化之后,容器只直接调用它一次。请阅读本文以了解servlet的工作原理:并非每个线程都调用
init()
方法。在servlet实例化之后,容器只直接调用它一次。请阅读以下内容以了解servlet的工作原理: