2011-10-06 10 views
3

私のアプリケーションでスレッドプールを使用しています。私はTreadPoolExecutorをサブクラス化し、メソッドbeforeExecute、afterExecuteをオーバーライドし、統計的な目的で終了しました。
私自身のThreadFactoryを実装し、newThreadメソッドをオーバーライドしました。私は、ThreadPoolExecutor beforeExecuteとafterExecuteフックについて明確にする必要があります

私は、スレッドプールラッパークラスが「呼び出し可能な」タスクを十数作成し、invokeAllメソッドを呼び出して結果を取得することを理解します。各タスクにはインタフェースオブジェクトがあります。ベースXオブジェクトはインタフェースを実装し、何度もサブクラス化されています。

the wrapper threapool class: 

List<DoTask> tasks;  

tasks.add(new DoTask(new A("A")); 
tasks.add(new DoTask(new B("B")); 
tasks.add(new DoTask(new C("C")); 

results = threadpool.invokeAll(tasks, 60, TimeUnit.Seconds); 

in my DoTask class: public DoTask implements Callable 

constructor: DoTask(ifaceX x) 

im my Base class X: public class X implements ifaceX 
In my child class A, B, C: public A extends X 

私の質問されています。スレッドプールが実行されたときに、それは少しのように見えるコードの観点からオブジェクトX.

のチャイルズを起動します私は前と後の実行フックを呼び出すときに、呼び出し可能なタスクに保持されている情報を取り出す方法は?または私は何をしようとしていると思うスレッドプールの各スレッドに特定の名前を与えることは可能ですか?

Runnableオブジェクト/ FutureTask/callableに隠されたデバッグモードのEclipse変数ビューに情報があることがはっきりとわかります。

なぜ私はRunnableオブジェクトと呼び出し可能なもの(結果を取得する必要があるため)でメソッド(beforeExecute、afterExecute)をオーバーライドする必要があるのか​​分かりません。行方不明か分からないことたぶんFutureTaskをサブクラス化する必要があるのでしょうか?あなたは物事が代わりにbeforeExecuteafterExecuteをオーバーライドの各呼び出しの前と後に発生する場合、あなたの助けのための

おかげで、

答えて

0

DoTaskをスーパークラスに容易になるだろう。

編集:また、電話番号を使用している場合は、ExecutorServiceを使用することもできます。

+0

私は、Before/AfterExecute()がRunnableの代わりにCallableタスクをどのように処理するかについて質問していると思いますか? – Will

関連する問題