2011-03-19 3 views
0

나는 하나 이상의 핸들러 (쓰레드)를 실행시키고, 어떤 쓰레드는 다른 쓰레드의 결과에 의존한다. 그래서 나는 정의 된 순서로 쓰레드를 실행시키고 자한다.두 스레드가 안드로이드에서 미리 정의 된 순서로 실행되는 것을 어떻게 허용합니까?

+1

연속적으로 처리해야하는 경우 왜 두 개 이상의 스레드가 필요합니까? 스레드 실행 순서를 직접 제어 할 수 없으므로 두 번째 스레드는 첫 번째 스레드에 의해 트리거 된 일부 이벤트를 기다리는 블록 상태가되어야합니다. 이것은 실현 가능합니까, 아니면 두 번째 스레드가 다른 작업을 수행하고있는 경우에 당신은 폴링을 끝낼 것입니다 ... – forsvarir

답변

2

두 번째 쓰레드는 첫 번째 쓰레드 .

final Thread th2 = new Thread(new Runnable(){ 
    public void run(){ 
     doSomething2; 
    } 
} 
Thread th1 = new Thread(new Runnable(){ 
    public void run(){ 
     doSomething; 
     th2.start(); 
    } 
}); 
th1.start(); 
th2.join(); 

하지만 당신은 아마 전혀 번째 스레드 필요가 없습니다 당신이 완료하는 데 다른 스레드가 하나 개의 스레드에서 대기해야하는 경우

Thread th1 = new Thread(new Runnable(){ 
    public void run(){ 
     doSomething; 
     doSomething2; 
    } 
}); 
th1.start(); 
th1.join(); 
0

는, 몇 가지 옵션이있다합니다.

하나는 CountDownLatch를을 사용하는 것,

어딘가에 보통주 래치 CountDownLatch를 래치 = 새로운 CountDownLatch를 (1);

스레드 1,

doSomething(); 
countdownLatch.countdown(); 

스레드 2

countdownLatch.await(); 
doSomethingElse(); 

카운트 래치 번만 것처럼 사용될 수있다.

java.util.concurrent에는 다른 클래스가있어서 문제를 해결할 수 있습니다. LinkedBlockingQueue, CyclicBarrier, Exchanger가 유용 할 수 있습니다. 더 자세한 내용을 알지 못해도 더 말하기가 어렵습니다.

그리고 덧글 및 기타 답변에서 지적한 것처럼 가능한 경우 여러 스레드를 피할 수 있습니다.

관련 문제