从另一个 servlet 更改布尔值以停止循环

Changing boolean value from another servlet to stop the loop

提问人:Stephan 提问时间:9/29/2023 更新时间:9/29/2023 访问量:40

问:

我有一个 for 循环,它根据布尔变量的值运行。

public class LoopClass{
..
private boolean[] toInterrupt = new boolean[];
public boolean getValue() {
        
        return toInterrupt[0];
    }

    public void setValue(boolean newValue) {
        toInterrupt[0] = newValue;
    }
}
public method abc{

for loop{

if (getValue()){
   break:
}}}

我想通过 servlet 中断这个循环:

public class interruptServlet exetnds HttpServlet {

LoopClass = lp = new LoopClass();
lp.setValue(true)
}

即使在执行 servlet 之后,boolean toInterrupt[0] 始终保持 false。 如何通过 servlet 更改布尔值以停止循环?

Java for 循环 servlet 中断 逻辑

评论

1赞 lealceldeiro 9/29/2023
如果在另一个线程中运行(我假设是这样),则需要正确管理对变量的多线程访问,以避免数据一致性问题。顺便说一句,请尽可能接近您实际在做什么,以便志愿者可以更好地帮助您;您发布的那个无法编译。interruptServlet
3赞 Tim Moore 9/29/2023
如果创建 的新实例 ,则不会影响其他现有实例中的值。LoopClass
0赞 Stephan 9/29/2023
@TimMoore:感谢您的评论。如何更改现有实例中的值?
1赞 Tim Moore 9/29/2023
您需要对该实例的引用。我认为这个问题将受益于有关您的用例总体情况的更多上下文。

答:

1赞 Rob Spoor 9/29/2023 #1

如前所述,新实例不与实际的 servlet 共享任何状态。LoopClass

有一种非常简单的方法可以在 servlet 之间共享状态:.例如:ServletContext

循环类

private static final String INTERRUPTED_ATTRIBUTE = LoopClass.class.getName() + ".interrupted";

public static void setInterrupt(ServletContext context, boolean interrupt) {
    context.setAttribute(INTERRUPTED_ATTRIBUTE, interrupt);
}

private boolean interrupted() {
    return Boolean.TRUE.equals(getServletContext().getAttribute(INTERRUPTED_ATTRIBUTE);
}

中断 Servlet

LoopClass.setInterrupt(getServletContext(), true);

请注意,我保留了所有用于中断的实际代码。这样,您可以轻松地重命名属性名称,而无需更改其他代码。LoopClass

评论

0赞 Rob Spoor 10/6/2023
别客气。