簡體   English   中英

在線程之間共享數據

[英]sharing data between threads

我有一個帶有兩個不同線程的Java應用程序,它執行以下操作:

1.第一個線程(它是一個ThreadPool) - 監聽一個端口,查找來自五個不同用戶的傳入連接。

我們打電話給他們:

user1 user2 user3 user4 user5

他們每個人都發送GPS數據。

2.第二個線程同時我的java應用程序監聽第二個端口,等待另一個客戶端(不同於發送GPS數據的客戶端)連接到它。

現在......我有第二個應用程序連接到我剛才描述的java應用程序。

在第二個應用程序中,我有一個列表user1 ... user5,具體取決於我將選擇哪個項目(user1 ... 5)我必須從我選擇的用戶那里收到正確的數據。 此外,所有這些數據都將存儲在DB中的第二個用戶處。

現在任何人都可以給我一個暗示如何在線程之間共享所有這些數據????

我嘗試使用Singleton類和BlockingQ,但似乎沒有一個適合因為數據丟失!

Java中的並發執行通常依賴於“共享內存”,因此只需確保兩個線程中的代碼共享對可以交換信息的公共數據結構的引用。

您需要確保的是,以同步/線程安全的方式訪問此結構。 這可以通過使用synchronized關鍵字(不推薦)或使用java.util.concurrent包中的類(推薦)手動完成。

BlockingQueue可能很適合你。 你在嘗試這門課時遇到了什么問題?

問題是從BlockingQueue讀取的線程需要區分BlockingQ中寫入的數據(來自user1,2,3的數據......)。

我建議你為UserData創建一個類,它包含數據和它來自哪個用戶。 (並將其存儲在BlockingQueue<UserData> 。)

BlockingQ可以保留多長時間和多少數據????因為所有這些數據都需要存儲在我的第二個應用程序中的數據庫中...所以我可以負擔得起任何一個!!!!!!!!!! !

BlockingQueue實際上是一個接口,但它的所有標准實現( ArrayBlockingQueueLinkedBlockingQueue ...)都可以保留任意數據量(即,僅限於計算機上的可用內存量)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM