내 멀티 스레드 응용 프로그램에 여러 스레드를 만드는 기본 클래스가 있습니다. 메인 클래스는 일부 스레드를 시작한 후에 기다립니다. 내가 만든 실행 가능한 클래스는 파일 목록을 가져오고, 파일을 가져오고, 웹 서비스를 호출하여 파일을 제거합니다. 쓰레드가 끝나면 메인 클래스에 다시 실행하도록 알린다. 내 문제는 잠시 동안 작동하지만 아마도 1 시간 정도 지나면 로그에서 볼 수있는 출력에서 run 메소드의 맨 아래로 갈 것입니다. Java 프로세스가 아직 실행 중이지만 로그에서보고있는 내용을 기반으로 아무 것도 수행하지 않습니다.왜 멀티 스레드 응용 프로그램이 일시 중지 되었습니까?
메인 클래스 메소드 :
Main 메서드
while (true) {
// Removed the code here, it was just calling a web service to get a list of companies
// Removed code here was creating the threads and calling the start method for threads
mainClassInstance.waitMainClass();
}
public final synchronized void waitMainClass() throws Exception {
// synchronized (this) {
this.wait();
// }
}
public final synchronized void notifyMainClass() throws Exception {
// synchronized (this) {
this.notify();
// }
}
나는 원래 인스턴스에서 동기화를했지만 방법으로 변경되었습니다. 또한 웹 서비스 로그 또는 클라이언트 로그에 오류가 기록되지 않습니다. 내 가정은 기다렸다가 잘못 알았거나 정보가 누락되었다는 것입니다.
구동 가능한 스레드 코드 : run 메소드의 끝에서
// This is a class member variable in the runnable thread class
mainClassInstance.notifyMainClass();
나는 대기를하고 내가 필요가없는 실행하는 메인 클래스를 싶지 않기 때문에 프로세스에 알려야하는 이유 다른 스레드를 만들 수 있습니다.
메인 클래스의 목적은 스레드를 생성하는 것입니다. 클래스에는 스레드를 생성하고 마무리하는 무한 루프가 있습니다.
무한 루프의 목적은 회사 목록을 지속적으로 업데이트하기위한 것입니다.
어떤 종류의 로그를 추가 했습니까? –
알림은 대기중인 스레드가있는 경우에만 작동합니다. 주 스레드가 대기 상태가되지 않은 경우 알림 메시지가 표시됩니다. –
세마포어로 더 잘 할 수 있습니다. –