Java 同步来自 Java 脚本的异步调用

Java synchronize asynchronous calls from JavaScript

我有很多来自客户端的异步 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 变量的变化。

非常不常见的设计...

无论如何,当你有一个原始类型变量的并发read/write时,你可能想要使用 Atomic* 数据类型。

AtomicBoolean 应该可以解决问题:

volatile proceed = true替换为AtomicBoolean proceed = new AtomicBoolean(true)

if (proceed)替换为if (proceed.get())

proceed = false;替换为proceed.set(false)