1

ライターなどの作成時にDDS独自のバックグラウンドを開始するメッセージングのメカニズムを使用するプログラムを Java で作成しています。threadsただしmain thread、エラーが発生した場合はexception、次のコードでスローします。

throw new FooUncheckedException(writerTypes.get(i) + " is not a writer type");

その後、メインスレッドは想定どおりに終了します。ただし、使用しているライブラリによって作成されたバックグラウンド スレッドDDSは引き続き実行されるため、プログラムの実行が技術的に停止することはありません。プログラムを維持しているバックグラウンド スレッドも正常にシャットダウンするにはどうすればよいでしょうか。

4

4 に答える 4

2

メインスレッドを終了する前に、次のようにクリーンアップを試みます。

participant.delete_contained_entities(); 
DomainParticipantFactory.get_instance().delete_participant(participant);

[作成した参加者ごとに繰り返します...]

これにより、参加者が保持/作成したリソース (スレッドを含む) を再利用する必要があります。

于 2015-02-28T15:26:52.397 に答える
0

バックグラウンド スレッドを開始する前にデーモン フラグを設定すると、メイン スレッドの終了時に自動的に強制終了されます。

Thread t = new Thread(...);
t.setDaemon(true);
t.start();

Java 仮想マシンは、最後の非デーモン スレッドが終了するとすぐにシャットダウンして終了します。プログラムが最初に起動するとき、main() スレッドは唯一の非デーモン スレッドです。

于 2015-02-26T22:51:49.050 に答える