도서관 호출이 있는데, 예를 들어 Descriptor.compute(Molecule m)
이라고합시다.실제로 스레드를 중지시키는 Java의 스레드 풀은 무엇입니까?
이 호출은 어떤 분자 (라이브러리의 버그) 영원히 중단 및 일부 분자를 들어, 오랜 시간에 대한 계산을 수행합니다. 모든 프로세서를 사용할 수 있도록 다중 스레드 또는 다중 처리 방식으로 서버에서 계산을 실행하고 싶습니다. 또한 컴퓨터가 어떤 분자에 대해서도 TIMEOUT
보다 많은 시간을 소비하는 것을 원하지 않습니다.
compute
메서드는 isInterrupted()
을 검사하지 않으므로 어디서나 기다리지 않고 Thread.interrupt()
호출에 응답하지 않습니다.
그래서 나는 이러한 유형의 작업을 중지에서 잘 작동 Thread.stop()
을 사용할 필요가 있다고 생각합니다.
내 질문은 : 실제로 스레드를 중지 할 수있는 몇 가지 스레드 풀은 있습니까?
통신을 위해 ArrayBlockingQueue<Input>
과 ArrayBlockingQueue<Result>
을 사용하는 간단한 풀을 만들었습니다. 그러나, 나는 이상한 들 중 compute()
동안 나는 추적 할 수 없습니다 (이러한 예외는 null 스택 추적을 가지고 있습니다). 그래서 이미 존재하는 구현이 없는지 묻는 중입니다. 인터넷 검색은 과일을 가져 오지 않았고, 발견 한 모든 것은 interrupt
입니다.
감사합니다.
편집 : 그건 그렇고, 도서관이 CDK입니다.
흠 .. 그 예외를 던져 '계산'방법을 강요 하는가? 그렇지 않다면, '분자'내에 '계산'으로 빈번히 처리되고 segfault/AV를 강제하는 다른 분야가 있습니까? –
각 Descriptor 구현은 다르게 동작합니다. 불행히도 예외를 던질 수있는 안전한 장소는 없습니다. – Krab
"라이브러리 버그": 가까운 장래의 해결책은 아니지만 공개적으로 버그 리포트를 제출해야합니다 (이미 존재하는 경우 투표를해야합니다). – Thilo