2012-12-12 3 views
0

기본적으로 셀 (공유 메모리)과 자동차 (관찰 가능한 스레드) 행렬을 가진 프로그램이 있습니다. 각 이동 전에 각 차는 다음 셀에 대한 액세스를 요청하고 다음 호출이 차단되면 wait()을 호출하는 동기화 된 블록에 들어가고 스레드는 잠자기 상태가됩니다. 나는 그것이 기다리고있는 동안 차를 무언가를 할 수있는 어떤 방법이 있는지 궁금 해서요. 그리고 그가 알리기 시작하면 기다리기 전에 계속하고있는 일을 계속할 수 있습니다.기다리는 동안 무언가를하는 멀티 스레딩

답변

1

당신은 재 설계해야합니다 : 자동차로 실을 모델링하지 마십시오. 스레드 풀이 필요한 모든 작업을 수행하도록하고 콜백 함수가있는 비동기 모델이 자동차의 동작을 안내하도록하십시오. 셀이 막히면 자동차 상태가 변경되지 않고 스레드 풀이 다른 작업을 수행 할 수 있습니다. 셀이 해제되면 적절한 콜백을 시작하여 업데이트 작업을 풀에 제출합니다.

+0

, 감사 – Nmas

+0

내가 그 살펴본하지만 난 할 수있을 거라 생각하지 않습니다 주로 모든 자동차가 동시에 인스턴스화되지 않기 때문에 자동차 클래스의 스레드 대신 스레드 풀을 사용합니다. 나는 모든 차가 "주차 된"곳에 목록이 들어있는 여러 차고를 가지고 있는데, 이것은 각 차고에서 새로운 나사 (자동차) .start()를 수행한다는 것을 의미합니다. 예를 들어 각 차고마다 2 개의 새 차를 시작합니다. 목적지는 다른 차고입니다. – Nmas

+1

내 제안은 스레드 풀로 스레드를 대체하는 것보다 훨씬 더 깊게 실행됩니다. 모델링 된 엔티티 (자동차)를 스레드에 단단히 묶는 디자인은 근본적으로 결함이 있으며, 생산 가치가있는 시스템은 그렇게 설계 될 수 없습니다. 사실, 당신은 아마도 스레딩, 메인 이벤트 디스 패칭 루프를 실행하는 하나의 스레드, 이벤트 핸들러의 모든 코드와 같은 것을 필요로 할 것입니다. –

0

2 웨이 스레드 통신을 위해 Handler을 사용하여 사용자가 설명한 것과 비슷한 작업을 수행했습니다.

  • 아이/노동자/'자동차'스레드는 작업을 수행 일정 기간 (~ 100ms의)에 대한 절전 모드로 전환하고, 검사 상태 변경에 대한 스레드 클래스의 멤버 변수를 깨어 때.

  • 부모 스레드는 작업자 스레드에 Handler 메시지를 보내고 작업자 스레드는 명령을 받고 작업자 스레드 클래스의 구성원 변수를 설정하고 다음에 작업자가 잠자기 모드에서 나가는 것을 감지합니다. (루퍼없이) 핸들러의 좋은 개요 -

    • 스레드 :

    다음은 내가 Handler의를 사용하고 효과적으로 스레드간에 통신하는 방법을 파악하기 위해 검토했던 링크입니다. w/코드 예제 : com.indy.testing.TestMain.java.MyThread.java http://indyvision.net/2010/02/android-threads-tutorial-part-3/

  • 스레드 - 확인 핸들러의 개요 및 루퍼/2WAY의 통신 w http://techtej.blogspot.com/2011/02/android-passing-data-between-main.html

  • 스레드./코드 예제 w : sample.thread.messaging.ThreadMessaging.java http://codinghard.wordpress.com/2009/05/16/android-thread-messaging/

내가 스레드 풀에 살펴 보겠습니다
+0

감사합니다. – Nmas