我有一个带有两个不同线程的Java应用程序,可执行以下操作:
1.第一个线程(它是一个ThreadPool) - 监听一个端口,查找来自五个不同用户的传入连接。
我们打电话给他们:
user1 user2 user3 user4 user5
每个人都发送GPS数据。
2.第二个帖子 与此同时,我的java应用程序侦听第二个端口,等待另一个客户端(与发送GPS数据的客户端不同)连接到它。
现在......我有第二个应用程序连接到我刚刚描述过的java应用程序。
在第二个应用程序中,我有一个列表user1 ... user5,具体取决于我将选择哪个项目(user1 ... 5)我必须从我选择的用户那里收到正确的数据。 此外,所有这些数据都将存储在数据库中的第二个用户处。
现在任何人都可以告诉我如何在线程????
之间共享所有这些数据我尝试使用Singleton类和BlockingQ,但似乎这些都不适合导致数据丢失!
答案 0 :(得分:5)
Java中的并发执行通常依赖于“共享内存”,因此只需确保两个线程中的代码共享对可以交换信息的公共数据结构的引用。
您需要确保以同步/线程安全的方式访问此结构。这可以通过使用synchronized
关键字(不推荐)或使用java.util.concurrent
包中的类(推荐)手动完成。
BlockingQueue
可能很适合你。你在尝试这门课时遇到了什么问题?
问题是从BlockingQueue读取的线程需要区分BlockingQ中写入的数据(来自user1,2,3的数据......)。
我建议您为UserData
创建一个类,其中包含数据和来自哪个用户。 (并将其存储在BlockingQueue<UserData>
。)
BlockingQ可以保留多长时间和多少数据????因为所有这些数据都需要存储在我的第二个应用程序的数据库中...所以我可以负担任何损失!!!!!!! !!!!
BlockingQueue
实际上是一个接口,但它的所有标准实现(ArrayBlockingQueue
,LinkedBlockingQueue
...)都可以保留任意数据量(即,仅受限制)通过计算机上的可用内存量。)