Java 同步来自 JavaScript 的异步调用

标签 java servlets asynchronous synchronized volatile

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

相关文章:

javascript - 收听页面内容已更新

javascript - 如何在 NodeJS 中 readFile() ?

java - Spring 4 和 thymeleaf 表单验证

java - 如何在 Java 中创建一个固定大小的泛型数组?

jsp - 属性还是属性?

security - 如何保护 servlet 的访问?

java - 无法使用 ajax 调用 servlet

asp.net - 自动取消 SmtpClient.SendAsync 调用

java - Android-Things GpsService 未初始化

java - HttpClient 错误 : The target server failed to respond