java - POJO Property change listener - 理想方式

标签 java while-loop javabeans

我正在开发一个基于 REST 的 Web 应用程序,它将为某些数据异步调用第三个系统(使用 websockets)。所以 浏览器 -> REST -> 我的 WebApp -> 另一个应用程序 -> 我的 WebApp -> 浏览器 我的 WebApp 与另一个应用程序之间的通信是异步的,我只能使用一些标识符来跟踪请求的响应。 所以,我请求 C 作为 <counter>.C响应将是 <counter>.Response两个计数器都相同。

为了将响应映射到请求,我将命令、计数器、标志设置为一个 bean。我保留了一个 while 循环,它不断检查标志是否已设置。收到响应后,设置标志,while 循环退出,我知道数据可用。

这是正确的方法吗?有什么方法可以让这个变得更好,因为我觉得(我可能错了!)保持打开的 while 循环是不正确的。

类bean设置如下,

public void setAllProperties(){
 bean.setCommand(commandString);
 bean.setCounter(counter);
 bean.hasResponse(false);
}

webservice中的片段是

bean.setAllProperties();
sendToApplication(bean);
int checkCounter = 0;
while(!bean.hasResponse && checkCounter > 0){
  if(bean.hasResponse){
     checkCounter++;
     // loggers and other logic here
  }
}

最佳答案

循环破坏了异步操作的很多值(value)。它还会消耗大量 CPU 时间(在使用此类循环时尝试添加延迟 - 快速 hibernate )。

我建议改用“wait()”和“notify()”/“notifyAll()”。

在等待响应的代码中,执行如下操作:

synchronized ( bean ) {
    while ( ! bean.hasResponse ) {
        bean.wait();
    }
}

在处理响应和更新 bean 的代码中:

synchronized ( bean ) {
    bean.hasResponse = true;
    bean.notifyAll();
}

关于java - POJO Property change listener - 理想方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26600652/

相关文章:

java - Jetty,isSecure() 在 HTTPS 连接上返回 false

php - 根据已完成的搜索来搜索mysql数据库

c - 如何停止无限循环?

c - `while(*p++ = *(p+1));` 是未定义的行为吗?

java - 如何在没有 xml 的情况下验证使用 @ManagedProperty 注入(inject)的 bean 属性?

java - 如何在我的代码中使用 Base64.java 文件?

java.lang.ClassNotFoundException 尽管使用了 CLASSPATH 环境变量

java - 如何调用不带参数的泛型方法?

java - 将带有 FloatProperty 的 ObjectProperty 绑定(bind)到其他属性

java - Netbeans bean 将 RadioButton 绑定(bind)到 String