4
私は独自のスレッドプールと、呼び出し可能なインターフェイスの並列を実行できる将来のオブジェクトを作成しています。 Executorは、シャットダウンメソッドを提供して、すべてのワーカースレッドの実行を停止します。以下のようなスレッドプールを作成している場合は、すべてのスレッドの実行が終了した後に停止する方法を実装する必要がありますか?executorServiceのシャットダウンメソッドをオーバーライドする方法
マイカスタム・スレッド・プールは、私は、スレッドのリストを維持するための方法を考えると、彼らはアイドル状態にあるかどうかをチェックcouldntのthis
class MyThreadPool implements java.util.concurrent.Executor
{
private final java.util.concurrent.BlockingQueue<Callable> queue;
public MyThreadPool(int numThreads) {
queue = new java.util.concurrent.LinkedBlockingQueue<>();
for (int i=0 ; i<numThreads ; i++) {
new Thread(new Runnable(){
@Override
public void run() {
while(true) {
queue.take().call();
}
}
}).start();
}
}
@Override
public <T> Future<T> submit(Callable<T> callable) {
FutureTask<T> future = new FutureTask(callable);
queue.put(future);
return future;
}
public void shutdown(){ }
}
のように見えますか?
私はこれをやってみましたが、まだスレッドが、私はそれ故にキューから呼び出し可能取るための条件を待っているスレッドがあるbecuause理由があるbeileve – krs8888
を実行しているように見えます終了しません。私が間違っている場合は私を修正してください – krs8888
はい、これは動作しますが、私のキューをポーリングしたくありません。私はしかし、私のシャットダウンの方法でpoison pillのアプローチを使用しました。私がしたことは、シャットダウンメソッドのキューにpoisonオブジェクトが追加されたことです。キューから取り出したら、それが毒であるかどうかを確認します。もしそうなら、私はループから脱出する – krs8888