2011-10-12 29 views
0

我知道允許進程間通信的概念。我的程序需要啓動第二個線程。我知道如何從Java/Android中將數據從一個線程傳遞或推送到另一個線程,但我沒有看到有關「拉取」數據的大量信息。子線程需要經常抓住父線程上的數據。這是如何完成的?我如何從另一個線程或進程中獲取數據(Android/Java)

+0

您是否需要比共享內存更多的東西? –

回答

2

由於線程共享內存,您可以使用線程安全的數據結構。一些參考java.util.concurrent。該軟件包中的所有內容均專爲多線程情況而設計。

就你而言,你可能想要使用LinkedBlockingQueue。通過這種方式,父線程可以將東西放入隊列中,並且子線程可以在喜歡的時候抓住它。如果隊列爲空,它也允許子線程阻塞。

2

您可能會混淆線程和數據。線程是代碼執行的行,它可以對某些數據進行操作,但它們本身不是數據,也不包含數據。數據包含在內存中,線程由CPU(或vm或您選擇的任何級別)執行。

您以相同的方式訪問數據,無論是否在線程中完成。那就是你使用變量或對象字段等。但是對於線程,你需要確保在線程同時訪問相同數據時不會出現競爭狀態。總之,如果你有一個對象有一個由線程執行的方法,只要你確保只有一個線程同時執行它,你仍然可以以常規的方式從這個對象獲取數據。

+0

我認爲@ user966005令人困惑的是進程間和進程內而不是數據。 – Merlin

+0

對於我'子線程需要在父線程中獲取數據'聽起來像是一個用詞不當。但除非他澄清,否則肯定很難說出問題所在。 –

相關問題