POJO属性更改侦听器-理想方式

厚颜无耻

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

为了将响应映射到请求,我将命令,计数器,标志设置为一个bean。我有一个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
  }
}

循环破坏了异步操作的许多价值。它还消耗了大量的CPU时间(使用这种循环时,请尝试增加延迟-快速睡眠)。

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

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

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

在处理响应并更新Bean的代码中:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android-以编程方式更改开关的状态而无需触发OnCheckChanged侦听器

筛选器无法像我在JS中理想化的方式那样工作

jQuery:输入属性更改的侦听器

事件侦听器,用于通过别有用心的方式检查复选框的更改

以编程方式配置侦听器,而不使用注释

以特定方式在图片数组上添加事件侦听器

查询IN语句的最理想方式

使用属性更改侦听器更新挥杆组件

您好,我需要设置依赖属性更改侦听器

动作属性上的按钮->添加更改侦听器

当前用户属性更改时的Firebase侦听器

在更改时附加数据属性侦听器

ValueProperty更改侦听器

在节点中使用for循环的理想方式

调用 firebase getIdToken 的最理想方式

当javafx中的父属性更改时,清理绑定并更改嵌套属性上的侦听器

使用阶段侦听器以编程方式将参数添加到HtmlCommandLink

为什么未正确且以一致的方式清理节点和侦听器?

如何以适当的方式将动作侦听器添加到JList?

为什么在调用setVisible(false)和dispose()时,以不同的方式调用窗口/组件侦听器?

如何以编程方式在预制件中向 UnityEvent 添加侦听器

我可以以更有效的方式编写这些事件侦听器吗?

如何以编程方式将lambda侦听器规则注册到ALB?

Aurelia对自己的属性进行更改不会调用更改的侦听器

libGDX在侦听器之间更改

JavaFX HTMLEditor文本更改侦听器

JavaFX的TextField的值更改侦听器

JComboBox选择更改侦听器?

值更改侦听器到JTextField