2014-09-04 4 views
-1

스레드 ID가 주어지면 스레드를 중단하거나 중지 하시겠습니까? 예를 들어, 스레드 ID의 형식이 길어야합니다. Thread.enumerate 및 Thread.activeCount스레드 ID를 기반으로하는 인터럽트 스레드

Thread findThreadById(long id) { 
    Thread [] threads = new Thread[Thread.activeCount() * 2]; 
    int count = Thread.enumerate(threads); 
    for (int i = 0; i < count; i++) { 
     if (threads[i].getId() == id) { 
      return threads[i]; 
     } 
    } 
    return null; 
} 

Thread.activeCount (의 두 배)와

+0

[This] (http://stackoverflow.com/questions/7786305/stopping-a-specific-java-thread) 도움이 될 수 있습니다. – Akshay

답변

0

시작 위 스레드의 수가 Thread.activeCount에 호출 사이에 증가 된 경우를 잡으려고하고 Thread.enumerate. 필요하거나 그렇지 않을 수도 있지만, 수 바이트의 메모리 이외에는 비용이 많이 들지 않아야합니다.

원하는 Thread 인스턴스가 없으므로 Thread.interrupt를 호출하면됩니다.

참고 - 스레드의 하드 중지 및 종료는 나쁜 형식입니다. 일종의 조건 (다른 스레드에 의해 설정 됨)을 기반으로 스레드 종료를 자체적으로 수행하는 방법을 찾는 것이 훨씬 좋습니다.

0

스레드의 협력을 통해 제공되는 모든 방법을 사용합니다. 실의 협조 없이는 할 수 없습니다. 협력없이 스레드를 인터럽트하거나 중지하면 프로세스가 파괴됩니다. (스레드가 다른 스레드가 필요로하는 잠금을 스레드가 복원하려고했던 불변성을 깨뜨린다고 가정하십시오.)

이 질문은 스레드와 프로세스에 대한 생각이 부족한 경향이 있습니다. 스레드 작업을 완료하려면 협조. 언제든지 외부에서 스레드에 "도달"해야 올바른 작업을 수행 할 필요가 있다고 생각할 때, 스레드가 처음부터 잘못 코딩되었다는 경고 여야합니다. 쓰레드가 무엇을하고, 무엇을하고 싶은지를 코드화하십시오. 그런 다음 중단하거나 중지하지 않아도됩니다.

어떤 이유로 든 가능하지 않은 경우 해당 스레드의 코드에 인터럽트 또는 중단 기능을 디자인하십시오.