필요 : 1. 핫 스레드 (항상 존재하며 그 번호는 미리 알고있다)와 프리 스레드 (타임 아웃이 만료되면 인터럽트)가있다.Runnable을 구현할 때
구현합니다. 1. 클래스 HotThread는 Runnable을 구현합니다. 2. 클래스 FreeThread는 HotThread를 확장합니다 (타이머 추가). 3. 플래너로 ThreadPool 클래스. 메소드가 있습니다 : addFreeThread(), cancelTask (int id).
내 addFreeThread은 다음과 같습니다
public void addFreeThread() {
FreeThread ft = new FreeThread(timeout);
Thread t = new Thread(ft);
ft.startTimer(t);
}
는 지금은 cancelTask을 구현하기 시작합니다
public void cancelTask(int id) {
... // get Thread threadToCancel from the ThreadPool.
threadToCancel.interrupt();
}
보다 큰 보인다. 그러나 타이머는 여전히 별도의 스레드에서 실행 중입니다. 타이머는 FreeThread 클래스의 인스턴스에서 시작되었습니다. 나는 자유로운 실을 시작할 때 그것을 알았다. 그러나 지금 나는 그것을 어디에서 발견해야할지 모른다.
Runnable을 구현하면 나에게 많은 혼란을 줄 수 있습니다. 아마도 실에서 ft를 추출 할 수 있을까요? 불가능한 것 같아. 나는 이것을 ThreadPool에 보관할 것인가? 이미 스레드와 해당 ID가있는 HashMap을 유지하고있어 번거로운 작업입니다. 나는 아이디와 그들의 fts를 유지하기 위해 또 다른 HashMap을 유지하는 것을 좋아하지 않을 것이다.
나에게 힌트를 주시겠습니까?
@Roberto Sánchez, 아니, 나는 그런 말을하지 않을 것이다. 여기서 타이머를 취소하는 방법에 대한 도움이 필요합니다. 반면에 더 일반적인 질문이 논의됩니다. – Trts
프리 스레드가 자체 타이머를 실행하게하는 것은 어떻습니까? 이렇게하면 타이머가 만료되면 자체를 취소 할 수 있습니다. –