2013-07-25 4 views
1

나는 다른 스레드에서 특정 기능을 실행하기를 원하는 안드로이드 응용 프로그램을 개발 중입니다. 이제이 스레드가 실행 중일 때 다른 스레드를 만들지 않으려 고합니다. 그래서 기본적으로, 나는 주 스레드가 스레드가 실행 중인지 확인하기를 원한다. 그렇다면 스레드를 우회하기를 원한다. 그렇지 않다면 나는 스레드를 생성하고 그 함수를 실행하기를 원한다. 어떻게해야합니까?스레드가 실행 중인지 확인하는 방법은 무엇입니까?

+3

좋아 잘 작동. 'Thread' 인터페이스는 무엇을 제공합니까? 힌트 :'isAlive()'를 보라. – andy256

+0

스레드에서 while (true) 루프를 실행하십시오. 스레드가 일부 synchro 객체의 맨 위에 대기하도록하십시오. 함수 실행을 원하면 싱크로를 신호하십시오. 모호한 수표가 필요하지 않습니다. CPU주기가 필요한 –

+0

. 스레드가 완료되면 이벤트를 보내는 별도의 클래스를 추가하는 것이 가장 좋습니다. 한편 isBusyFlag는 이벤트가 아직 전송되지 않은 경우 true로 유지됩니다. 따라서 CPU주기가 줄어 듭니다. – KarelG

답변

2

그런 경우에는 Future을 사용하는 것이 좋습니다. 코드를 FutureTask으로 지정하십시오. Future.isDone을 사용하면 Future이 완료되었는지 여부를 알려줍니다. 그리고 그렇다면 값을 돌려 줄 것입니다.

좋은 점은 동일한 스레드를 사용하여 미래의 코드 블록을 여러 개 실행할 수 있다는 것입니다.

은 당신이 현재있는 경우 :

Runnable myRunnable; 
Thread t = new Thread(myRunnable); 

이제 당신은해야합니다

Future<Void> future = new FutureTask<Void>(myRunnable); 
ExecutorService ex= Executors.newFixedThreadPool(1); 
ex.submit(future); 

future.isDone 당신에게 원하는을 줄 것이다. 재사용을 계속 할 수 있습니다 ex

+0

Future.isDone이 false를 반환하면 호출이 반환 될 때까지 Future가 아직 완료되지 않았습니까? –

+0

예. 설명서에 나와 있습니다. – Jatin

+0

흠 .. 나는이 'IsAlive', 'IsDone'호출에 대해 매우 의심 스럽다. 다른 코어에서 동시에 실행중인 스레드/작업 상태에 대한 일부 표시를 반환한다. boolean이 다시 계산 될 때 Bt는 더 이상 유효하지 않을 수 있습니다. –

4

Thread.isAlive() 방법을 확인할 수 있습니다.

이 스레드가 살아 있는지 테스트합니다. 이 시작되었고 아직 죽지 않은 스레드는 살아 있습니다.

+0

Thread.isAlive가 true를 반환하면 반환 할 때까지 스레드가 아직 살아 있습니까? –

+0

@MartinJames 예 – TN888

+0

@ Ty221 OK. Thread.isAlive 호출이 상태를 확인한 후 반환하기 전에 스레드가 정상적으로 종료되지 않도록하는 방법이 궁금합니다. –

0

나는 이것을 사용했다, 당신은 스레드에 대해 조금 알 수 있도록 그는

if (thread.getState() == Thread.State.NEW) 
{ 
    thread.start(); 
} 
관련 문제