在Java中同时更新数据时实时更新表单

时间:2016-05-08 23:28:27

标签: java concurrency real-time live

假设我有一些类似于存储在数组(2D)中的以下数据。我允许多个用户同时更新它,我想在表单上查看它或者我可以做什么,以便查看实时更新。

1   2   3   4   5   
6   7   8   9   10  
11  12  13  14  15  
16  17  18  19  20  
21  22  23  24  25  
26  27  28  29  30  
31  32  33  34  35 

任何人都可以帮我在Java中完成上述任务吗?如果有一种很好的方法可以用Python等其他语言来实现,我也很感激。

2 个答案:

答案 0 :(得分:0)

您必须使用' synchronized'关于方法或块的语句可以保存用户更改。它通过只允许一个用户执行整个同步块直到完成来控制对代码的访问。

以下是文档的链接,并附有一些示例。

https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html

答案 1 :(得分:0)

我假设:

  • 刷新率是几十毫秒的预定义值,你可以。
  • 用户可以同时覆盖彼此并更新丢失。
  • 您真的不想从您最终使用的解决方案中挤出每一盎司的性能。
  • 您没有在不了解这些技术如何在内部工作并修改它们以适应新要求的情况下,为不同的用例翻译此处提供的技术。

话虽如此,您只需使用一个int元素的共享数组和一个跟踪其修订版的共享AtomicLong。然后,您可以允许每个并发用户更新数组,只需确保每次更新时AtomicLong都会增加。

您可以让UI线程定期检查共享数据,方法是先读取AtomicLong,然后读取数组内容 - 周期的长度将取决于您想要维护的帧速率,但是我和#39; d认为30毫秒应该足够好了。

由于在<{1}}的写入和读取之间发生之前的边缘,因此可以保证看到线程内容正在更新。请注意,如果要使用AtomicLong的数组,则需要确保对每个数组元素的写入都是原子的。

这里用一些虚拟代码快速说明原理:

long