java - 线程间共享数据

标签 java multithreading gps

我有一个带有两个不同线程的 java 应用程序,它执行以下操作:

1.第一个线程(它是一个线程池)- 监听一个端口以获取来自五个不同用户的传入连接。

我们称他们为:

用户1 用户2 用户3 用户4 用户5

他们每个人都发送 GPS 数据。

2.第二个线程 同时,我的 Java 应用程序监听第二个端口,等待另一个客户端(不同于发送 GPS 数据的客户端)连接到它。

现在...我有第二个应用程序连接到我刚才描述的 java 应用程序。

在第二个应用程序中,我有一个列表 user1...user5,根据我将选择的项目 (user1...5),我必须从我选择的用户那里接收正确的数据。 此外,所有这些数据都将存储在数据库中的第二个用户处。

现在谁能给我一个提示,告诉我如何在线程之间共享所有这些数据????

我试过使用 Singleton 类和 BlockingQ,但似乎这些都不合适,因为数据丢失了!

最佳答案

Java 中的并发执行通常依赖于“共享内存”,因此只需确保两个线程中的代码共享对公共(public)数据结构的引用,它们可以在其中交换信息。

您需要确保以同步/线程安全的方式访问此结构。这可以通过使用 synchronized 手动完成。关键字(不推荐)或使用 java.util.concurrent 中的类包(推荐)。

A BlockingQueue可能很适合你。您在尝试这门课时遇到了什么问题?

The thing is that the thread that reads from the BlockingQueue needs to differentiate between the data that is written in the BlockingQ(data that comes from user1,2,3...).

我建议您为 UserData 创建一个类其中包含数据及其来自哪个用户。 (并将其存储在 BlockingQueue<UserData> 中。)

How long and how much data can a BlockingQ keep????Because all this data needs to be stored in a DB in my second app...so I can afford losing any of it!!!!!!!!!!!

BlockingQueue实际上是一个接口(interface),但它的所有标准实现(ArrayBlockingQueueLinkedBlockingQueue ...)都可以保留任意数量的数据(即,仅受计算机上可用内存数量的限制)。

关于java - 线程间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063159/

相关文章:

java - Grails/GORM withCriteria 搜索 toString()

c# - 暂停使用 IOCP 的应用程序时创建的线程过多

c# - 处理存储过程

android - 如何在Android中使用谷歌地图获得速度?

android - 检测或防止用户使用虚假位置

Android map - 比较两个方向的相似性

java - 仅在 onCreate 值分配时发生

java - 错误 : Could not find the main class: org. apache.solr.util.SolrCLI

c - `pthread_mutex_trylock` 两个线程同时调用时阻塞

java - 当 Android 应用程序在设备上启动时进行调试