Callables と ThreadPool を使用して、Web サービスを介して (Java API を介して) いくつかのトランザクションを同時に処理しようとしています。
public class CallableTxSender implements Callable<Transaction> {
private Transaction transaction;
private Engine engine;
public CallableTxSender(Transaction transaction, Engine engine) {
this.transaction = transaction;
this.engine= engine;
}
@Override
public Transaction call() throws Exception {
return engine.processTx(transaction);
}
}
Engine
- は、Web サービス呼び出しを行う Api です。
私は、たとえば 50 個のスレッドのプールを作成しています。
ExecutorService executorService = Executors.newFixedThreadPool(50);
List<Transaction> transactions = transactionDao.getPaidTxs();
Engine engine= new Engine();
for (Transaction transaction : transactions) {
CallableTxSender txSender = new CallableTxSender(transaction, engine);
executorService.submit(txSender);
}
100 件のトランザクションを処理しようとすると、最初の 20 ~ 30 件のトランザクションで正常に開始され、その後どこかでハングします。API が同時リクエストをサポートしているかどうかはわかりませんが、そうすべきです。
私が確認したいのは、クライアント部分が正常であることです。どう思いますか?
編集:プールサイズを10に減らしましたが、正常に処理されました。コメントのマルコに感謝します。それでも問題は、プールが 10 ではなく 50 の同時タスクでハングするのはなぜですか?
どうもありがとう