私のマルチスレッド アプリケーションには、複数のスレッドを作成するメイン クラスがあります。メインクラスは、いくつかのスレッドを開始した後に待機します。私が作成した実行可能なクラスは、Web サービスを呼び出して、ファイルの一覧を取得し、ファイルを取得し、ファイルを削除します。スレッドが完了すると、メイン クラスに再度実行するように通知します。私の問題は、しばらくは機能しますが、おそらく 1 時間ほど後に、ログに表示される出力から run メソッドの最後に到達することです。Java プロセスはまだ実行されていますが、ログに表示されている内容に基づいて何も実行していません。
主なクラス メソッド:
主な方法
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();
// }
}
もともとインスタンスで同期を行っていましたが、メソッドに変更しました。また、Web サービス ログまたはクライアント ログにエラーが記録されていません。私の仮定は、待機して通知が間違っているか、情報の一部が欠落しているということです。
実行可能なスレッド コード:
run メソッドの最後に
// This is a class member variable in the runnable thread class
mainClassInstance.notifyMainClass();
別のスレッドを作成する必要がない限り、メインクラスを実行したくないため、待機および通知プロセスを実行した理由。
メイン クラスの目的は、スレッドを生成することです。このクラスには、スレッドの作成と終了を永遠に実行するための無限ループがあります。
無限ループの目的は、企業リストを継続的に更新することです。