Содержимое массива Java изменяется самостоятельно

У меня есть программа, которая запрашивает значения из RTI DDS на основе списка точек (DynamicIoRunnable ниже). DyamicIoRunnable будет запрашивать экземпляр данных для каждой точки в предварительно определенном списке, он будет помещать данные в список и, как только он пройдет через все элементы в предварительно определенном списке, передаст их в поток процессора (ниже DDSP-обработчик - это сокращено до соответствующая часть) через общий BlockingQueue. Этот процессорный поток обработает каждый элемент в списке и создаст для него пользовательский объект (PointData). Чтобы устранить эту проблему, DynamicIoRunnable имеет только одну предопределенную точку, поэтому я легко могу ее идентифицировать. Проблема в том, что я добавляю PointData в список и распечатываю его по мере его сборки. Оператор печати перед добавлением всегда показывает правильное значение, но поскольку я перебираю массив с операторами печати после каждого добавления, после нескольких элементов предыдущие элементы меняются на другие данные, и я не уверен, как. Кто-нибудь видит, где что-то может быть изменено?

У меня есть пример результатов ниже. Это показывает первое повреждение после нескольких циклов (первые 2 элемента, которые были первоначально добавлены в список, полностью изменяются - это ухудшается по сравнению с несколькими дополнительными элементами и всегда является более старыми элементами, хотя я не вижу единой закономерности относительно того, что изменяют данные чтобы, когда это изменится или сколько изменится).

Общая очередь

public static BlockingQueue<Object> messageProcQueue = new LinkedBlockingQueue<Object>();

DynamicIoRunnable

 public void run()
{
    try
    {
        List<PointData> temp = new ArrayList();

        for (PredefData a : TrendApp.predefPointList)
        {
            if (a.getDdsHandle() != null)
            {
                Object ioData = dds.getTopicRef().get(pv.getTypeString(a.getPointType().value())).read_io(a.getDdsHandle(), io -> io);

                if (ioData != null)
                {
                    PointData val = new PointData(a.getMachineId(), a.getPointType(), a.getIoId(), a.getSubfield(), a.getConfigId(), ioData);
                    temp.add(val);
                }
            }
        }

        TrendApp.messageProcQueue.put(temp);
    } catch (Exception e)
    {
        errorLog.error("Unable to add dynamic IO to message processing queue");
        e.printStackTrace();
    }
}

DDSProcessor

private static List<PointData> writeBuffer = new ArrayList<PointData>();
if (a instanceof PointData)
                {
                    PointData req = (PointData) a;

                    // Add new point to the buffer

                    System.out.println("Enter Point Data: " + req.getData());
                    writeBuffer.add(req);

                    for (int x = 0; x < writeBuffer.size(); x++)
                    {
                        System.out.println("Building Buffer = " + writeBuffer.get(x).getData());
                    }
}

PointData Object

private int machineId;
private jPointType pointType;
private int ioId;
private String subfield;
private int configId;
private long timestamp;
private Object data;

public PointData(int machineId, jPointType pointType, int ioId, String subfield, int configId, Object data)
{
    this.machineId = machineId;
    this.ioId = ioId;
    this.pointType = pointType;
    this.subfield = subfield;
    this.configId = configId;
    this.data = data;
}

Пример результатов

Add Point Data to list:
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 974.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 224
value: 0.0

Building Buffer = :
machineId: 1186
ioId: 224
value: 0.0

Building Buffer = :
machineId: 1186
ioId: 224
value: 0.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0


Add Point Data to list: :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 224
value: 0.0

Building Buffer = :
machineId: 1186
ioId: 224
value: 0.0

Building Buffer = :
machineId: 1186
ioId: 224
value: 0.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

Building Buffer = :
machineId: 1186
ioId: 31
value: 956.0

0 ответов

Другие вопросы по тегам