2017-08-01 85 views
1

我有很多来自客户端和一个POST请求的异步GET调用。 我的servlet获得POST请求后,我想以其他方式处理即将发生的GET调用。这里是我的尝试,但未能:Java同步来自JavaScript的异步调用

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变量的变化。

回答

1

非常少见的设计...

无论如何,当你有一个基本类型变量的并行读/写,你可能需要使用原子*数据类型。

AtomicBoolean应做的伎俩:

更换volatile proceed = true通过AtomicBoolean proceed = new AtomicBoolean(true)

通过if (proceed.get())

更换if (proceed)通过proceed.set(false)

+0

更换proceed = false;谢谢你,它的工作原理,通过你的回答我刚才的时间在某处阅读解决方案。 “非常不寻常的设计”是什么意思? –