我有很多来自客户端的异步 GET 调用和一个 POST 请求。 在我的 servlet 收到 POST 请求后,我想以其他方式处理即将到来的 GET 调用。这是我尝试过但失败的方法:
public class MyServlet {
private static volatile proceed = true;
public void doGet(req, resp) {
...
doGetAnswer(req, resp);
...
}
public void doPost(req, resp) {
...
doPostAnswer(req, resp);
...
}
public String doGetAnswer(req, resp) {
if (proceed)
return "Answer GET request";
else
return "Do NOT answer GET request";
}
public String doPostAnswer(req, resp) {
proceed = false;
return "POST called, stopping GET requests";
}
}
我的问题是通过 GET 调用运行的线程无法识别 volatile 变量的更改。
最佳答案
非常不常见的设计...
无论如何,当您并发读/写原始类型变量时,您可能需要使用 Atomic* 数据类型。
AtomicBoolean
应该可以解决问题:
用 AtomicBooleanproceed = new AtomicBoolean(true) 替换
parameproce = true
将 if (proceed)
替换为 if (proceed.get())
将 proceed = false;
替换为 proceed.set(false)
关于Java 同步来自 JavaScript 的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45436027/