2012-12-11 4 views
2

Je cours deux threads séparés (Android SDK) un thread principal et un autre qui compte le nombre de changements d'état sur un capteur d'entrée numérique. Je souhaite accéder au compte de changement d'état dans le thread principal pour envoyer les données ailleurs. Suis-je capable de suspendre le fil du capteur, de passer la valeur à l'aide d'un getter, puis de reprendre le fil? Je voudrais également réinitialiser le compteur après l'échantillonnage (en utilisant un setter?).Accès variable aux variables multiples

Quelle est la meilleure pratique pour implémenter cela?

+1

comment fonctionne le thread qui compte le nombre de changements d'état sur un capteur d'entrée numérique? Est-ce qu'il dort périodiquement ou le capteur le notifie-t-il d'une façon ou d'une autre? –

+0

'wait()', 'sleep()' etc. – Mordechai

+0

il attend une valeur élevée. puis ajoute à un compteur. Puis répète – user1893700

Répondre

0

Cela ressemble à peu près à un problème de consommateur producteur. Vous pouvez avoir une file d'attente de blocage de longueur unique.

fil conducteur - consommateur

Autre fil (qui compte les changements d'état) --producer

API Java pour résoudre le problème des producteurs et consommateurs:BlockingQueue

Lire valeur dans un autre thread, et placez-le dans un BlockingQueue (taille 1). Le thread principal va vérifier la file d'attente et lire la valeur. Une fois que la valeur est lue, l'autre thread peut à nouveau mettre une nouvelle valeur. Cela garantira que votre valeur est lue par le thread principal, puis réinitialisée.

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

0

Si le compte est un int, vous pouvez simplement accéder à partir du thread principal sans problème.

+0

yer son int, mais dois-je le verrouiller du tout? – user1893700

+0

Pas besoin de verrouiller l'int. Incrémenter un int est une opération atomique, vous obtiendrez la bonne valeur pour le moment de la lecture (autant qu'il y ait une bonne valeur pour les mises à jour simultanées ...) – zmbq