안드로이드 Thread 재실행을 하면 이미 실행중인 스레드라고 나옵니다.

조회수 3835회

안녕하세요. 안드로이드에서 Thread를 재사용하려고 하는데 오류가 나서 질문드립니다.

/* 메인 스레드에서 돌리는 작업입니다. */

// ParserThread는 Thread 클래스를 상속 받은 클래스입니다.
// 내부 메소드로 run()만 오버라이드 했습니다.
ParserThread thread = new ParserThread();

// 스레드를 시작합니다.
thread.start();

/* 작업 영역 */
doSomething();

// 스레드가 종료되길 기다리고, 종료됐을 경우 다시 실행합니다.
thread.join();
if (!thread.isAlive()) // 확실하게 종료된건지 확인차 조건을 넣었습니다.
    thread.start(); /* 여기서 Thread already started 에러가 납니다 */

마지막 thread.start()에서 오류가 납니다. thread.join()은 빠르게 지나가며, if문에 중단점을 걸고 thread.getState()를 통해 스레드의 상태를 확인하면 Terminated라고 써있습니다. 콜스택에도 해당 스레드는 없구요

이미 실행이 종료된 스레드임을 확인했는데도 계속 에러가 뜨네요.

어떤 부분이 문제인건지 감이 잘 오지 않습니다.

안드로이드의 Thread클래스는 재사용이 아예 안되나요? 매 번 같은 스레드를 돌릴 때마다 새로 생성해줄 수도 없는 노릇이고.. 리눅스에서의 thread 구조체는 재사용이 가능했던 것으로 기억하는데 이거랑은 다른 얘길까요..ㅠㅠ

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    java api - thread 를 보면 thread를 두 번 이상 start할 수 없습니다. 번거롭지만 새로운 thread 인스턴스를 만들어서 start하는 방법밖에는 없네요.

    It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 자바의 스레드는 좀 다른 개념인가 보네요ㅠㅠ 감사합니다! hee 2017.1.11 21:12

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)