1. ホーム
  2. java

[解決済み] Java スレッドが終了するのを待つ

2023-07-02 19:24:43

質問

データをダウンロードしているスレッドがありますが、データをロードする前にダウンロードが終了するまで待ちたいと思います。 これを行う標準的な方法はありますか。

もっと詳しく

URLからデータを取得するDownloadクラスがあります(Serialized POJOs)。 DownloadはRunnableおよびObservableです。 ダウンロードされたバイトとダウンロードサイズを記録します。 ユーザーに進行状況を表示するプログレスバーがあります。 GUIはDownloadを監視し、プログレスバーを更新します。

POJOがダウンロードされると、私はそれを取得して次のステップに移動したい。 各ステップは、前のステップが終了するのを待つ必要があります。 問題は、ダウンロード スレッドを待機するためにアプリケーションを一時停止する方法を思いつかないことです。 ダウンロードが終了したら、私は download.getObject() を呼び出し、データをオブジェクトとして返します。 私はそれをキャストして、次のダウンロードに取り掛かることができます。

ダウンロード用のURLを管理し、Downloadへのすべての呼び出しを行うヘルパークラスがあります。 この呼び出しは getObject を呼び出して、キャスティングを実行します。 Gui は helper.getUser() ヘルパーはスレッドの実行を開始し、私はそれが終了したとき、それがキャストされたオブジェクトを返すことができるように、それが「知っている」ようにしたいと思います。

何か提案や例はありますか?私はこの設計の初期段階にいるので、私はそれを変更することをいとわない。

更新しました。

私は http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html#get に従い、スレッドが終了するまでブロックするためにモーダルを使用しました。 コードは非常に乱雑で、私はこの方法が好きではありません。 ダウンロード プロセスのワークフローを処理するための「クリーンな」方法を見つけるために、今後も努力を続けます。

どのように解決するのですか?

Thread には、それを行うメソッドがあります。 参加する で、スレッドが実行を終えるまでブロックします。