Java 如何初始化这个信号量
我问过这个关于servlet中的多线程的问题,很多人建议使用静态变量 如果我设置了一个静态变量,我需要初始化它。例如,公共静态信号量许可证 首先,我尝试在与servlet关联的过滤器的init()方法中初始化它: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
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的工作原理: