我正在尝试使用 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,并且处理得很好。感谢评论中的马尔科。问题仍然是,是什么让池挂起 50 个并发任务而不是 10 个?
非常感谢