2012-12-11 4 views
2

주 스레드는 두 개의 별도 스레드 (Android SDK)를 실행하고 디지털 입력 센서에서는 상태 변경 횟수를 계산합니다. 주 스레드의 상태 변경 횟수에 액세스하여 다른 곳으로 데이터를 보내려고합니다. 센서 스레드를 일시 중단하고 getter를 사용하여 값을 전달한 다음 스레드를 다시 시작할 수 있습니까? 나는 또한 샘플링 (setter를 사용하여?) 후 카운터를 재설정하고 싶습니다.다중 스레드 변수 액세스

이것을 구현하는 가장 좋은 방법은 무엇입니까?

+1

디지털 입력 센서의 상태 변경 횟수를 계산하는 스레드는 어떻게 작동합니까? 주기적으로 잠자기 상태입니까, 아니면 센서가 어떻게 든 그것을 알려줍니까? –

+0

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

+0

높은 값을 대기합니다. 그런 다음 카운터에 추가됩니다. 그렇다면 – user1893700

답변

0

이것은 생산자 소비자 문제와 유사합니다. 단일 길이 블로킹 큐를 가질 수 있습니다.

메인 쓰레드 - (상태 변화를 계산) 소비자

다른 스레드 --producer

생산자 소비자 문제를 해결하기 자바 API :BlockingQueue를

읽기 값을 다른 thread로 설정해, BlockingQueue (사이즈 1)에 배치합니다. 메인 쓰레드는 큐를 체크하고 값을 읽습니다. 값이 읽히면 '다른 스레드'가 다시 새 값을 넣을 수 있습니다. 이렇게하면 주 스레드가 값을 읽은 다음 다시 설정한다는 보장을 받게됩니다.

API : 계수는 int입니다 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html

0

경우, 당신은 단지 문제없이 메인 스레드에서 액세스 할 수 있습니다.

+0

예멘 아랍 공화국의 반복 int,하지만 그것을 전혀 잠글 수 있습니까? – user1893700

+0

int를 잠글 필요가 없습니다. int를 증가시키는 것은 원 자성 연산이므로 읽기 시간에 적합한 값을 얻을 수 있습니다 (동시 업데이트에 적합한 값만큼이나 ...) – zmbq

관련 문제