在同一时间激活的多个进程中以Java方式更新数据

我正在创建一个带传感器的令牌环,每个传感器都是一个独立的过程。 当我启动传感器时,它与网关通信并获取系统上已有的实际传感器列表。 问题是,每次我开始一个新的过程,我希望每个已经存在的传感器都获得更新的列表,所以要了解其他传感器已经添加,列表不再是他们拥有的,而是一个新的更新。(所以假设进程必须始终具有相同的列表)。 我使用一个服务器,我调用serverSocket来监听消息。 我可以让服务器理解列表已被更改但我无法做的是如何更改在我的SensorClient类上找到的sensorList的值,以便更新? 在下面的代码中,我展示了我在做什么,但是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>(){}.getType(); ArrayList 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 ); } } } 

serverSocket线程

 public class serverSocket extends Thread { public int port,nextPort; ArrayList sensorList; public static int position; public serverSocket(int port, ArrayList 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!!!!!!!!!"); } } } 

receivedMessages线程

  public class receivedMessages extends Thread { private BufferedReader inFromClient; private Socket connectionSocket; ArrayList sensorList; int position,nextPort; public receivedMessages(Socket socket, ArrayList 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 = 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 sensorList) throws IOException { //code } public synchronized ArrayList 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. }}