groovy-shell-server을 신청서에 추가하고 싶습니다. 우리는 최근에 내부 API에 대한 호출로 신속한 진단을 받거나 단기적인 수정을 제공 할 수있는 몇 가지 생산 문제에 직면 해 있습니다. Groovy-shell-server는 이것을 달성 할 수있는 좋은 방법을 제공합니다.가파른 GroovyShell 서버 스레드에서 Thread.stop을 호출하는 것이 너무 위험합니까?
하지만 실제로 이것을 프로덕션에서 사용하면 잠재적 인 복잡성이 생깁니다. 신중한 동료 검토에도 불구하고 우리는 CPU를 고정 시키거나 무한 루프에 빠지게되는 스크립트를 실행한다고 가정 해 봅시다. 그 스레드를 죽일 방법이 필요해. 그래서 groovy-shell-server를 개선하여 실행중인 Groovy 클라이언트 스레드의 선택적인 hard stop()을 지원할 생각이었습니다.
나는 그 것을 안다. Thread.stop() is inherently unsafe; 그것은 discussed on StackOverflow before입니다. 제 질문은, 이점이이 경우의 위험보다 중요하다고 생각합니까? Thread.stop()을 사용하여 Runaway GroovyShell 서버 스레드에 대한 일종의 "비상 브레이크"로 실용적인 선택을하고 있습니까? 또는 객체를 일관성없는 상태로 유지할 가능성이 너무 높습니까?
(누군가가 실행중인 자바 응용 프로그램 프로그래밍, 인터럽트 대한 액세스를 제공하기 위해 더 나은 방법이있는 경우 또는, 나는 모든 귀 해요.)
Thread.stop()이 스레드를 실제로 중지하는지 여부는 논박하지 않습니다. 확실히 그럴 것입니다. 문제는 다양한 객체를 나쁜 상태로 남겨 둘 가능성 때문에 스레드를 멈추는 것이 위험한 지 여부입니다. 일반적으로 나는 이익이 위험을 압도하는 경우가 있다고 동의합니다. – greghmerrill
@greghmerrill * Thread.stop()은 실제로 스레드를 멈추게 할 것입니다. * 확실히, 모니터에서 대기중인 스레드가 중지되지 않을 수도 있습니다 (즉, 잠금 1을 유지하는 스레드를 종료해야 함). 'Thread.stop()'은 스택 트레이스를 검사하고 위험한 순간을 표시 할 수 있는지를 알고있는 경우에 * 거의 * ok입니다. 또는 코드를 뒤죽박죽 처리하고'Thread.interrupt()'를 검사하거나 다른 정적 * 안전 점 *을 호출하여 ThreadDeath와 유사한 오류를 던지는 코드 인핸서를 사용하십시오. – bestsss
@bestsss _ 반드시 모니터 대기중인 스레드가 중지되지 않을 수 있습니다 (즉, 잠금이있는 스레드를 먼저 죽여야 함) _ -이 소식은 저에게 좋은 소식입니다. 팁 주셔서 감사합니다! 나는 [그것을 시험해 보았다] (https://gist.github.com/1183567), 잠금을 획득하는 스레드를 멈추게하면 즉시 잠금을 멈추지 않을 것이다. 인수. – greghmerrill