0

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

我有一项服务(例如通知程序),并且该服务的一种方法 [例如 notifyTransaction(Transaction trans) ] 可远程用于回调。

现在还有其他服务说(transactionsReader),它不断读取传入的事务并调用通知程序的远程方法,即notifyTransaction(Transaction trans).

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

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

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

我想做的事 ?我想使用 multithreadintnotifyTransactions()以便我有多个线程来处理每个事务。

为了开始,我 ExecutorService executor = Executors.newFixedThreadPool(2); 在方法中使用notifyTransactions()并创建了我的方法 processOperation(Operation op) 的任务。但这会为每次调用创建一个不同的池,notifyTransactions()所以我在几秒钟内就有了大约 3000 个池。最后它内存不足。

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

提前致谢 :)

4

1 回答 1

1

开始我使用 ExecutorService executor = Executors.newFixedThreadPool(2); 在方法 notifyTransactions()

这是您需要ExecutorService实例在两者中通用的问题。如果您开始调用每个操作,那么它将创建大量线程。你应该在里面调用submit任务notifyTransactions()

You should use a producer consumer approach using BlockingQueue which is bounded. So if queue is full producer will stop if queue is empty consumers will stop. So in your case processOperation(Operation op) is a producer which will process operation and put it in BlockingQueue and inside notifyTransactions() you will dequeue it and process accordingly.

于 2012-10-11T17:47:46.323 回答