2012-02-06 3 views
1

다른 스레드가 종료 될 때까지 기다리는 스레드를 만들고 대신 종료하고 두 번째 스레드를 시작하고 스레드 스레드의 다른 인스턴스를 만듭니다. ?스레드 동시성 wait() 다른 스레드가 끝내고 작업을 계속합니다.

Thread1 first = new Thread1(); 
first.start(); 
while(flag==true){//start while1 
first.wait(); 
Thread2 second = new Thread2(); 
second.start(); 
while(second.isAlive()){ 
Toast toast = new Toast(...WORKING IN PROGRESS...);//just show something 
} 
flag = false; 
}//end of while1 

스레드가 실행을 멈출 때까지 스레드가 먼저 대기 할 예정입니까 ?? 스레드를 먼저 일시 중지하고 스레드 초가 끝나면 작업을 계속하기 만하면됩니다. 어떤 도움 주셔서 감사합니다

답변

0

내가 좋아하는 방법 중 하나는 CountdownLatch입니다.하지만 코드에서 스레드를 사용하는 방법에 대한 이해가 부족하다는 것을 보여줍니다. 앞으로 나아 가기 전에 일반적으로 쓰레드에 대해 좀 더 읽어 볼 것을 제안합니다. 스레드와 병행 성은 당신이 잘못하면 왕족을 망칠 매우 쉽습니다. 스레드에

class Worker implements Runnable{ 

    public void run(){ 
     int count = 0; 
     while(true){ 
      Toast toast = new Toast(...WORKING IN PROGRESS...);//just show something 
      count++; 

      if(count == 10) 
       break; 
     } 
    } 
} 

그럼 그냥 통과 실행 가능한 Worker :

1

난 당신이 뭔가를 찾고 생각

Thread first = new Thread(new Worker()); 
first.start(); 
first.join();// waits for the first thread to finish 
Thread second = new Thread(new Worker()); 
second.start(); 

또한 당신이하지 않는 한 클래스가 Worker라고 있습니다 및 Worker2은 존재하지 않습니다. 그러나 하나의 스레드를 실행하고 스레드가 완료 될 때까지 기다린 다음 다른 스레드를 실행할 이유가 거의 없습니다. 즉, 동시성의 목적을 완전히 상실하게되므로 순차적으로 코드를 실행할 수 있습니다.

1

Java를 작성한다고 가정하면 Thread.join() 메서드를 사용하여 일부 스레드가 다른 스레드가 끝날 때까지 기다리게 할 수 있습니다. 당신이 스레드이 완료 될 때까지 기다리는 스레드 1를 원하는 경우 예를 들어, :

Thread Thread2 = new SomethingImplementingThread(); 
Thread Thread1 = new Thread(new Runnable() { 
        public Thread waitforthisone; 
        public void run() { 
        try { 
        waitforthisone.join(); 
        } catch (InterruptedException e) {} 
        // Do stuff once waitforthisone has finished 
        }); 

Thread1.waitforthisone = Thread2; 
Thread2.start(); 
Thread1.start(); // When thread 1 starts it will run Thread 2's join function, and thus 
       // wait for thread 2 to exit 

는 NB : 코드의 대기 명령이 실행 스레드 (이 경우도 thread1 또는 스레드 2,하지만 스레드가 발생할 수는 그 생성 그들) 기다릴() [라인 4], 그것은 잠들게됩니다. 특히 다른 스레드 (thread1 또는 thread2)가 first.notify()를 호출하는 경우에만 대기중인 스레드를 깨울 수 있습니다. 위에서 제시 한 코드는 그렇지 않으면 지나칠 수 없습니다.

+0

나는 나 자신을 설명하는 것이 매우 안 좋다. 미안. 내가 그를 위해 메시지가 있는지, 그것도 서비스를 제공하기 때문에 그것은 여전히 ​​클라이언트로 사용할 수 있다고 말하면서 각 2/3 초 확인 서버에 constanly 연결 스레드를 시작했습니다. 그것은 잘 작동합니다. 이제 onclickListener와 버튼을 구현 , 스레드를 일시 중지하고 서버에 연결하여 요청 (예 : 변환 할 비트 맵)을 보내려는 다른 스레드를 시작하려고합니다. 이 스레드는 요청을 보낸 후 응답을 받았습니다. 지금은 첫 번째 스레드가 결과 또는 클라이언트에 대한 데이터가 있는지 확인 작업을 계속 싶습니다. –

+0

thead 1은 false로 설정 한 button exit와 mainActivity Thread를 닫을 때까지 finish()를하지 않으면 죽지 않아야합니다. –

관련 문제