2012-04-11 17 views
4

私は、顧客が独自のコードをJavaで書くことを可能にするフレームワークに取り組んでいます。そして、このフレームワークは、スレッド内でコードを呼び出して(スレッドAと呼ぶ)、カスタマイズされたものを実行します。Javaのスレッドからすべての子スレッドを取得するには?

お客様は、コードに新しいスレッドを作成することがあります。問題は、すべての顧客コードのスレッドが完了したことを知る方法です。または、顧客のコードにスレッドを作成することを禁止する方法は?

ありがとうございました。

+1

クライアントコードにスレッドを作成させることは、大混乱のIMOになります。彼らはなぜスレッドを必要としますか?パフォーマンス?そうした場合、時間のかかるリクエストを処理する方法を理解しておく必要があるベースフレームワークによって、パフォーマンス上の配慮を考慮する必要があります。クライアントがカスタムスクリプトを書くことを可能にするフレームワークはたくさんありますが、制御された環境(つまり、 'System.exit(1) 'などを呼び出してクライアントがJVMを停止させることはできません。 RMIは、クライアントがカスタムリクエストを送信できるようなものを提供していると思います。 RMIはあなたの請求書に合っていますか? –

答えて

1

クライアントコード用に新しいThreadGroupを作成することができます。 activeCountメソッドは、特定の瞬間にアクティブなクライアントスレッドの数を示し、enumerateメソッドを使用すると、スレッドを列挙できます。グループ全体の終了を待つには、スレッドを列挙し、それぞれにjoinを呼び出します。

新しいスレッドの作成を拒否するには、カスタムSecurityManagerで達成できると思いますが、詳細はわかりません。

+0

しかし、Frameworkは顧客が作成したスレッドの数をどのように知っていますか?フレームワークはスレッドを作成するメソッドを提供することができます。メソッドは、スレッドとしてスレッドを開始する際にパラメータとしてrunnableを取り、カウントを保持します。 – titogeo

+0

@TitoGeorge実行を終了したスレッドを含め、作成されたスレッドの総数を知りたいですか?私は、フレームワークのユーザーが協力しない限り、それが可能だとは思わない。 – Joni

+0

私は同意します。 SwingUtilities.invokeLater(Runnable doRun)のようにフレームワークは1つを提供する必要があります。しかし、フレームワークのユーザーがそれを使用することの重要性を理解している場合にのみ有益です。 – titogeo

関連する問題