2012-12-11 116 views
2

我運行兩個獨立線程(Android SDK)的一個主線程,另一個線程計算數字輸入傳感器上狀態更改的次數。我希望訪問主線程中的狀態更改計數以將數據發送到別處。我能否暫停傳感器線程,使用吸氣器傳遞值,然後恢復線程?我還想在取樣後重置計數器(使用setter?)。多線程變量訪問

實現此目的的最佳實踐是什麼?

+1

計數數字輸入傳感器上狀態變化次數的線程是如何工作的?它是否定期睡覺,或者傳感器以某種方式通知它? –

+0

'wait()','sleep()'等 – Mordechai

+0

它等待高價值。然後添加到計數器。然後重複 – user1893700

回答

0

這類似於生產者消費者問題。你可以有一個單一的長度阻塞隊列。

主線程 - 消費者

其他線程(計數狀態變化)--producer

的Java API來解決生產者消費者問題:的BlockingQueue

閱讀值放在其他線程中,並將其放置在BlockingQueue(大小1)中。主線程將檢查隊列並讀取值。一旦讀取值'其他線程'可以再次提供一個新值。這將保證您的值由主線程讀取,然後重置。

API:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html

0

如果計數的int,你可以從主線程訪問它沒有問題。

+0

它是一個整數,但是我必須鎖定它嗎? – user1893700

+0

無需鎖定整數。增加一個int是一個原子操作,你會在讀取的時候得到正確的值(只要有一個正確的值用於併發更新...) – zmbq