2010-11-18 3 views
0

Java에서 그리드 컴퓨팅에 대한 작업 검사 점을 시뮬레이트하려고합니다. 두 클래스 인 Job과 CheckPointInterrupter가 스레드입니다. CheckPointInterrupter 클래스는 일정한 간격으로 작업의 체크 포인트를 사용합니다.시뮬레이션 작업 체크 포인트 Java

시뮬레이션을 단순하게 유지하려면 작업 변수의 값을 검사 점 상태로 가져옵니다. 나는 Job 클래스의 디자인에 관한 딜레마에 직면하고있다. suspend() 및 resume() 메소드는 이제 더 이상 사용되지 않으므로 Job에서 CheckPointInterrupter를 사용하지 않으려합니다. 그래서 대안을 찾아서 찾았습니다. http://www.java2s.com/Code/Java/Threads/Anotherwaytosuspendandresume.htm

이것이 좋은 방법이라면 작업 클래스에 검사 점 관련 코드를 도입해야합니다. 책임이 하나 뿐인 수업의 원칙에 어긋나지 않습니까? 또한, 누군가가 나에게 그리드/분산 환경에서 일의 본질을 가르쳐 줄 수 있습니까? 이 일자리가 스스로 체크 포인트 할 수 있을까요? 자원/Google 검색 용어를 가리키는 조언이나 조언은 많은 도움이됩니다. 감사.

답변

0

구현중인 "그리드 컴퓨팅"의 종류가 무엇인지 알지 못하면 "Worker"메소드가 인터럽트 가능성을 인식하도록해야합니다. 기본적으로 인터럽트가 일반적으로 Java에서 작동하는 방식입니다.

올바르게 본 것처럼 교착 상태가 발생할 수 있으므로 stop(), suspend(), resume()은 더 이상 사용되지 않습니다. T 그는 단지 스레드를 인터럽트하는 유일한 방법은 Thread.interrupt()을 사용하고 정기적으로 Thread.interrupted()을 쿼리하여 "worker"메서드가 인터럽트를 처리하도록하는 것입니다.

다른 대안은 작업자 스레드에 일시 중지/다시 시작/어떤 것이 든 알리도록 구현할 수 있지만 핵심은 작업자 방법이이를 인식하고 있어야한다는 것입니다.

당신은이 것이 단일 관심사 원칙에 위배된다는 것은 맞지만 실제로이 논리의 거의 모든 것을이 용도로 특별히 설계된 클래스 (예 : 일종의 "SuspensionHandler", "WorkContext"등)에서 추출 할 수 있습니다.)

그러나 이것은 매우 복잡한 영역이며 좋은 조언을 제공하는 책이 많이 있습니다. (나는 Java Concurrency in Practice을 매우 좋아하며, 정확하게 기억한다면 거기에 비슷한 예제가있다.)