在同时活动的多个进程中更新 Java 中的数据

2024-01-04

我正在创建一个带有传感器的令牌环,其中每个传感器都是一个独立的进程。当我启动传感器时,它与网关通信并获取系统上已有的实际传感器的列表。 问题是,每次我开始一个新进程时,我希望每个现有的传感器都能获取更新的列表,以便了解其他传感器已被添加,并且该列表不再是它们拥有的列表,而是一个新的更新列表。(所以假设进程必须始终具有相同的列表)。我使用一个我称之为的服务器serverSocket它监听消息。我可以让服务器了解列表已更改,但我不能做的是如何更改列表的值sensorList发现在我的SensorClient类,要更新吗?在下面的代码中,我展示了我在做什么,但是sensorList一直是旧的,没有更新:/有人可以帮助我吗?谢谢 :)

SensorClient,我在其中启动新的过程传感器

 public class SensorClient {
    public static void main(String[] args) throws Exception {
    Sensor sensor = new      Sensor(type,identificator,portnumber,ipnumber,gatewayAddr,timestamp);
     Gson gson = new Gson();
      String message = gson.toJson(sensor);
       Client c = Client.create();
       WebResource r = c.resource("http://localhost:9999/gateway/");
       ClientResponse response = r.path("sensors/add").type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, message);

 if (response.getStatus() == 200) {
       repeat = false;
      Type collectionType = new TypeToken<ArrayList<Sensor>>(){}.getType();
     ArrayList<Sensor> sensorList =    gson.fromJson(response.getEntity(String.class), collectionType);
     System.out.println("Starting the sensor ...");
     System.out.println("Push exit when you want to delete the sensor!");
     int position = 0;
     for(int i = 0; i< sensorList.size();i++){    if(sensorList.get(i).getIdentificator().equalsIgnoreCase(sensor.getIdentificator()) ) position = i;
}
sensors.Sensor.simulation(type, identificator);// special thread for sensors simulations
createSensor.getInstance().setPrevNextWhenAdd(position,sensorList);

serverSocket serverSocket = new serverSocket(portnumber,sensorList,position,sensorList.get(position).getNext());
 serverSocket.start();

StopSensor stopSensor = new StopSensor(identificator,portnumber,position,sensorList);
stopSensor.start();

oneSensor s = new oneSensor(portnumber,sensorList);
 s.start();
 } else {
          repeat = true;
          count +=1;
          System.out.println("Error. Wrong data! ");
                }
              }
            while (repeat );
        }
    }
                            }

服务器Socket线程

public class serverSocket extends Thread {
    public int port,nextPort;
    ArrayList<gateway.Sensor> sensorList;
    public static int position;
    public serverSocket(int port, ArrayList<gateway.Sensor> sensorList,int position,int nextPort) {
    this.port = port;
    this.nextPort=nextPort;
    this.sensorList= sensorList;
    this.position=position;}
    public void run() {
            ServerSocket welcomeSocket;
            Socket connectionSocket;
            try {
                welcomeSocket = new ServerSocket(port);
                while (true) {
                    connectionSocket = welcomeSocket.accept();

                    receivedMessages thread = new receivedMessages(connectionSocket,sensorList,position,nextPort);
                    thread.start();
                }
            } catch (IOException e) {
                e.printStackTrace();
                System.err.println("Error!!!!!!!!!");
            }
        }
}

receiveMessages 线程

    public class receivedMessages extends Thread {

        private BufferedReader inFromClient;
        private Socket connectionSocket;
        ArrayList<gateway.Sensor> sensorList;
        int position,nextPort;
        public receivedMessages(Socket socket, ArrayList<gateway.Sensor> sensorList,int position,int nextPort){
                connectionSocket = socket;
                this.sensorList=sensorList;
                this.position=position;
                this.nextPort=nextPort;
 try {
      inFromClient = new BufferedReader( new InputStreamReader(connectionSocket.getInputStream()));
                   } catch (IOException e) { e.printStackTrace(); }
                }
@Override
public void run() {

try {

     String message = (inFromClient.readLine().toString());
     if (message.startsWith("Next") || message.startsWith("Previous")) {
     System.out.println(message);
     } else if (message.startsWith("The")) {
     System.out.println(message);                        createSensor.getInstance().setPrevNextWhenDelete(position, sensorList);
     } else  {// i receive the message that the list has changed
     System.out.println(message);
     sensorList = createSensor.getInstance().getSensorList();
     System.out.println("Updated " + sensorList);}

此类具有网关在发出请求时用于注册传感器的方法

public class createSensor {

  private static createSensor instance = null;
  private ArrayList<Sensor> sensor = new ArrayList<>();
  public int position, prevPosition, nextPosition, prevPort, nextPort;

 private createSensor() { } 
 public static synchronized createSensor getInstance() { 
        if (instance == null) {
            instance = new createSensor();
        }
        return instance;
    }
 public synchronized ArrayList insertSensor(String type, String identificator, int port, String id, String gatwayAddr, long timestamp) throws IOException {

sensor.add(new Sensor(type, identificator, port, id, gatwayAddr, timestamp));
                    return new ArrayList<>(sensor); // 
                }
            }
 public synchronized boolean hasMeasurements() {
     while (InnerBuffer.getInstance().emptyInnerBuffer())
                    return false;
                return true;
            }

public synchronized void setPrevNextWhenDelete(int position,ArrayList<Sensor> sensorList) throws IOException {
        //code
            }

public synchronized ArrayList<Sensor> getSensorList() {
                return new ArrayList<>(sensor);
            }

public synchronized int size() {
          return sensor.size();
            }

 public synchronized String returnRecentMeasurement (String id){
   String recentMeasurement=null;
      for (Sensor sensori : sensor) {
       if (sensori.getIdentificator().equalsIgnoreCase(id))
          recentMeasurement= InnerBuffer.getInstance().returnRecentMeasurements(id);
                    else
                        recentMeasurement = null;}
                return recentMeasurement;
            }
public synchronized void  setPrevNextWhenAdd() throws IOException {  //some other code where int position, prevPosition, nextPosition, prevPort, nextPort get their values. }}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在同时活动的多个进程中更新 Java 中的数据 的相关文章

  • 使用 ScriptEngine 从 JavaScript 调用 Java 方法

    我正在使用 ScriptEngine 运行 JavaScript 我希望 JavaScript 脚本能够调用 myFunction 其中 myFunction 是我的给定类中的一个方法 我知道可以将 importPackage 用于标准 J
  • 为 JSP 创建注销链接?

    当用户登录我的应用程序时 他提交一个要通过 Servlet 处理的表单 servlet 为用户创建一个会话 我如何创建一个链接以便用户可以注销 我似乎无法直接链接到 Servlet 如何删除会话并链接回主页 HttpSession sess
  • Javadoc 链接到其他类中的方法

    目前我正在使用以下 Javadoc 语法引用其他类中的方法 see link com my package Class method 据我从文档中了解到 这是执行此操作的正确方法 但现在到了有趣的部分 或者说令人沮丧的部分 当我生成这个 j
  • SharePoint 2010 Web 服务上的 Java JBoss 401 错误

    我的代码在 Eclipse IDE 中测试时运行成功 我正在使用生成的 Copy wsdl 通过 Web 服务连接到 MS SharePoint 2010 当我在 JBoss 服务器上部署代码 运行 Adob e LifeCycle 时 我
  • Google API - 重定向 URI 不匹配错误

    我正在我的网络应用程序上实现 google 登录 我通过参考this尝试过link https developers google com web signin server side flow 我的 google 登录按钮如下 div s
  • 在 Java 中将字符串复制到文件的开头

    我想将一个字符串写入文件的开头 我该怎么做 我根本不知道如何添加字符串 这就是我到目前为止所做的 public static void prepend String filename String data throws IOExcepti
  • 获取文本文件中行的字节偏移量?

    我有一个文本文件 例如 one two three four five 我需要获取文件中每一行的偏移量 我如何在 Java 中做到这一点 我搜索了一些 I O 库 如 BufferedReader 和 RandomAccessFile 但我
  • 当Java中set已经是原子的时候,为什么我们还需要compareAndSet呢?

    因为原子意味着线程安全 当 set 本身在java中是原子和线程安全的时候 我们什么时候使用compareAndSet 举例来说 我想以原子方式设置一个变量 以便每个其他线程都可以看到它 但我希望以线程安全的方式设置该变量 我可以简单地将其
  • 如何在休眠中持久保存实体期间验证实体的约束

    我有一个带有字段名称的实体 我希望它不超过255 所以我这样定义它 Entity public class A implements Serializable NotNull Size max 255 private String name
  • JAVA 签名对象 - 没有安装的提供程序支持此密钥:sun.security.rsa.RSAPrivateCrtKeyImpl

    我想使用密钥工具和以下命令创建的一对 RSA 密钥对我创建的文件进行签名 keytool genkeypair alias key keyalg RSA keysize 2048 sigalg SHA256withRSA validity
  • Java TCP Echo 服务器 - 广播

    我有一个简单的回显服务器 我希望当连接的用户向服务器键入任何内容时 所有其他客户端和该客户端都会收到消息 MOD 它现在不会发送给所有客户端 但它应该发送 而且我只是不知道我的代码出了什么问题 所以现在它只会将消息 MOD 发送给发送消息的
  • 在字节数组上进行右位旋转/循环移位的最快方法是什么

    如果我有数组 01101111 11110000 00001111 111 240 15 移位 1 位的结果是 10110111 11111000 00000111 183 248 7 数组大小不固定 移位范围为 1 到 7 含 目前我有以
  • toArray 与预先确定大小的数组

    使用时ar toArray new String ar size 安卓工作室3 2 1警告预先确定大小的数组并建议空数组 有两种方式将集合转换为数组 使用 预先确定大小的数组 如 c toArray new String c size 或使
  • BODMAS系统的加法和减法

    我一直在构建一个简单的公式计算器 但一直被加法和减法困扰 正如您应该知道的 在计算方程时 您遵循优先级算术规则 即括号 顺序 幂函数 除法 乘法 加法和减法 问题是加法和减法具有相同的优先级 因此您可以从左到右阅读 到目前为止 这是我的代码
  • CompletableFuture SupplyAsync

    我刚刚开始探索 Java 8 的一些并发特性 让我有点困惑的一件事是这两个静态方法 CompletableFuture
  • 将 JPanel 添加到 JFrame

    我有一个程序 其中将 JPanel 添加到 JFrame public class Test Test2 test new Test2 JFrame frame new JFrame Test frame setLayout new Bor
  • 枚举

    我试图拥有一组扩展通用接口的枚举 例如 interface Fooable void someCommonMethod enum E1 implements Fooable some enumuerations and a definiti
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • Java:易失性足以使类线程安全?

    我有一个关于 Java 中 volatile 语句的问题 请看这个构造的例子 class Master Foo is a class with thread safe methods public volatile Foo foo clas
  • 项目级别的@PowerMockIgnore

    在 Maven 中运行时 我的 powermock 测试用例出现以下错误 java lang LinkageError loader constraint violation loader instance of org powermock

随机推荐

  • 使用 RequestScoped Bean 和渲染属性的正确方法是什么?

    有人知道如何在 jsf 中将 RequestScoped bean 与渲染属性一起使用吗 呈现的属性是在 applyValues 阶段之前评估的 因此无法正确评估 我不想保留任何状态 该示例可以是带有数据表和按钮的outputPanel 数
  • 使用纯虚拟成员地址的虚拟呼叫。合法吗?

    我之前读过 可能是在 c l c moderated 上 虚拟函数调用可以模板化 我尝试了以下几行 include
  • 损坏的 R 代码用于选择文本文件中的特定行和单元格并将其放入数据框中

    这是一个扩展这个问题 https stackoverflow com questions 42513614 select specific rows and cells in text file and put into data fram
  • Android TextInputField 充气机错误

    尝试使用新版本时发生崩溃TextInputField对于 Android 并想分享我的解决方案 尝试 android appcompat 库中的新 TextInputField 导致我的应用程序崩溃 这是我的布局 xml
  • 在 IIS 上用 C# 输出到控制台

    我们正在尝试调试一些在 IIS 上用 C 运行的 Web 服务代码 我是 Windows 编程新手 不知道如何查看控制台的输出 我们在代码中有一些写入语句 但我不知道如何在这个东西运行时查看控制台 帮助 我发现跟踪功能非常有用 您可以通过以
  • Cordova 5.1.1 闪屏不工作

    我正在尝试让闪屏在我的 Android 设备 Redmi 1S Android 版本 4 4 4 KTU84P 上工作 该应用程序在我的设备上运行良好 但未出现启动画面 启动画面图像被复制并重命名为 screen png 到相应的 plat
  • 在 OpenAPI / Swagger 文件中声明日期的正确方法是什么?

    在 swagger 文件对象中声明日期的正确方法是什么 我认为是 startDate type string description Start date example 2017 01 01 format date 但我看到很多这样的声明
  • 如何使用Python将HTML代码复制到剪贴板?

    我正在尝试制作一个简单的脚本 在 Windows 10 上使用 python 将自定义文本超链接 示例 FakeSite com 复制到剪贴板 并且在粘贴时仍然将其识别为 HTML 与在 Microsoft Word 中复制自定义文本超链接
  • Android 在托管热点时查找设备的 IP 地址

    当设备托管热点时 我需要找到设备的 IP 地址 到目前为止我已经使用过这段代码 if is using Hotspot for Enumeration
  • 通过引入 T 常量将 Expression> 转换为 Expression>

    我有一个格式为的表达式Expression
  • Crontab 突然停止在服务器上工作?

    我在 Linux 平台上的服务器上设置了一些 crontab 在那 2 天之前 所有 cron 都在运行 我不知道 crontab 发生了什么 它们现在不工作 所有 cron 之前都在运行 之后我添加了一个新的 crontab 它们没有运行
  • HttpWebRequest 对象的诊断转储

    有没有什么好方法 除了繁琐地查询每个属性之外 在 C 中为 HttpWebRequest 构建诊断转储字符串 对于简单的对象 人们可以使用new JObject theObject 但这不适用于 HttpWebRequest 并且toStr
  • 使用 url 创建 yii2 动态页面:www.example.com/pageName

    在我的系统中 用户需要有他们的个人资料页面 我要求这些页面将显示在 url 中 如下所示 www example com John Doe www example com Mary Smith 如何在 yii2 中实现这些 URL 这些 J
  • 使用VBA获取word中的所有交叉引用

    我有一个相当大的 Word 文档 gt 400 页 其中有很多标题的交叉引用 到目前为止 我一直引用标题的标题 但现在我想更改它并引用标题所在的页面 我没有通过 GUI 找到解决方案 当然 手动处理除外 所以我正在考虑编写一些 VBA 不幸
  • XPATH获取text_1和text_2之间的所有节点

    我有这样的 HTML div text1 a link 1 a a link 2 a text2 a link 3 a text3 div 我想获取之间的所有节点text1 and text2 问题是没有p or span标签 只有纯文本
  • Google App Engine 在处理信号后终止:术语

    我有一个应用程序部署为 GCP 上的应用程序引擎 它调用 API 创建 Bytes IO 流并将数据上传到云存储 有 4 个文件 大约 44mb 需要上传 文件是 URL 列表 然后将其提供给数据流 但这并不重要 一开始 我为每个文件创建了
  • 带有负秒的奇怪 mktime 逻辑

    我一直在使用 mktime localtime 进行时间管理 包括一些关于日期 时间的繁重算术 当向 mktime 提供包含负值的 struct tm 时 我注意到一些非常奇怪的事情 采取下面的代码 2013 年 11 月 3 日 洛杉矶的
  • 如何在C中分配和释放对齐内存

    如何分配与 C 中特定边界 例如缓存行边界 对齐的内存 我正在寻找类似 malloc free 的实现 理想情况下应尽可能可移植 至少在 32 位和 64 位架构之间 编辑添加 换句话说 我正在寻找一些行为类似的东西 现在已经过时了 mem
  • 在 R / Rmarkdown 中同步两个传单地图

    JS 传单允许需要同步的两个地图 https github com turban Leaflet Sync 查看同步传单地图示例here http blog thematicmapping org 2013 06 creating sync
  • 在同时活动的多个进程中更新 Java 中的数据

    我正在创建一个带有传感器的令牌环 其中每个传感器都是一个独立的进程 当我启动传感器时 它与网关通信并获取系统上已有的实际传感器的列表 问题是 每次我开始一个新进程时 我希望每个现有的传感器都能获取更新的列表 以便了解其他传感器已被添加 并且