我将在每次查询 50 毫秒内从机器查询数据。我有一张带有 id 的地图供查询。对于一个 id,我创建一个线程。最后我有500个线程。
for (Map.Entry<String, NodeId[]> entry1 : nodeIds.entrySet()) {
try {
NodeId[] entrNodeIds = entry1.getValue();
new Thread() {
public void run() {
new ReadRegisteredValues().getValue(entry1.getKey(), entrNodeIds[0], client);
};
}.start();
} catch (Exception e) {
fileLogger.error("failed read node: " + entry1.getKey());
}
}
在此之后,我每 50 毫秒读取一次每个线程while(true)的值,如下所示:
public void getValue(String nodeName, NodeId registeredNodeId, UaClient client) {
while (true) {
try {
DataValue value = null;
try {
value = client.readAttribute(registeredNodeId, Attributes.Value);
} catch (ServiceException e1) {
e1.printStackTrace();
} catch (StatusException e1) {
e1.printStackTrace();
}
TeocModel curTeocModel = new TeocModel(value.getSourceTimestamp().getTimeInMillis(), nodeName, value);
KafkaStreamer.getInstance().startStreaming(curTeocModel.toJson());
Thread.sleep(50);
} catch (InterruptedException e) {
fileLogger.error(e.getMessage());
}
}
}
但在这种情况下,我读取的值不是平行的。这是并行查询数据的最佳方法吗?
任何想法?