0

私は自分のThreadPoolExecutorを使用して、すべてのタスクがいつ終了したかを確認しています。client.get()呼び出しであるメソッドがあり、成功すると、より多くのclient.get()呼び出しを実行します。ただし、java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@414ca470 rejected from java.util.concurrent.ThreadPoolExecutor@414ab1a0[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1]最初の成功の内部からclient.get()を呼び出しているときに取得しています。このエラーを修正するにはどうすればよいですか?

AsyncHttpClient client = new AsyncHttpClient();
int limit = 20;
BlockingQueue<Runnable> q = new ArrayBlockingQueue<Runnable>(limit);
ThreadPoolExecutor executor = 
                        new ThreadPoolExecutor(limit, limit, 20, TimeUnit.SECONDS, q);

client.setThreadPool(executor);

parseSilo(url, context); // this fires client.get() ... as it encounters urls in JSON feed
executor.shutdown();

while (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
    Log.e(TAG, executor.getTaskCount() + " tasks left");
}
if (executor.isShutdown()) {
     Log.e(TAG, "done");
}

parseSiloメソッド

public static void parseSilo(String url, final Context context) {
        client.get(url, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(String content) {
                Log.i(TAG, "Parsing Silo");
                JsonNode rootNode;

                //json parsing

                // parse collections
                for (Show show : listOfShows) {
                    parseCollections(show.getCollectionUrl()); // another client.get()
                }

            }

        });
}
4

1 に答える 1

1

client.get()後で電話をかけて いるようですので、すべての電話を終えた後executor.shutdown() に遅らせるか、シャットダウンした後に新しい電話を出さないでください。shutdowngetexecutor

于 2013-02-21T00:53:28.480 に答える