好的,这可能是一个很大的问题。

我有一个服务(例如notifier),该服务的一种方法[例如notifyTransaction(Transaction trans)]可远程用于回调。

现在,还有其他服务语句(transactionsReader)可以继续读取传入的事务,并调用通知者的远程方法notifyTransaction(Transaction trans).

现在向您解释问题,我想补充一下,我的交易包含多个操作。对于治疗手术,我有一个功能说processOperation(Operation op).

processOperation(Operation op)实际上对数据库进行了一些更新。

有什么问题 ?
服务transactionReader以非常快的速度读取传入的事务,并以比通过notifyTransactions()方法处理操作的速度大得多的速度调用processOperation(Operation op)

我想做的事 ?
我想在notifyTransactions()中使用multithreadint,以便有多个线程来处理每个事务。

首先我用
ExecutorService executor = Executors.newFixedThreadPool(2);
在方法notifyTransactions()中,并创建了我的方法processOperation(Operation op)的任务。但这会为每个notifyTransactions()调用创建一个不同的池,因此我在几秒钟内就拥有约3000个池。最后它消失了。

还有其他可能的解决方案吗?

提前致谢 :)

最佳答案

首先,我使用了ExecutorService executor = Executors.newFixedThreadPool(2);在方法notifyTransactions()中


这是您需要ExecutorService实例在两者中共同存在的问题。如果您开始按操作调用,那么它将创建大量线程。您应该只在submit中调用notifyTransactions()任务

您应该使用受限制的BlockingQueue的生产者使用者方法。因此,如果队列已满,则生产者将停止;如果队列为空,则使用者将停止。
因此,在您的情况下,processOperation(Operation op)是生产者,它将处理操作并将其放入BlockingQueue中,并且在notifyTransactions()内部,您将使其出队并进行相应处理。

10-06 11:23