回调函数时进行多线程处理

时间:2012-10-11 17:45:30

标签: java multithreading

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

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

现在有其他服务说(transactionsReader)继续读取传入的事务并调用notifyTransaction(Transaction trans).

的通知程序的远程方法

现在向您解释问题,我想补充一点,我的交易包含多个操作。对于处理操作,我有一个函数说processOperation(Operation op).

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

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

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

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

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

提前致谢:)

1 个答案:

答案 0 :(得分:1)

  

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

这是您需要ExecutorService个实例的问题。如果你开始调用每个操作,那么它将创建大量的线程。您应该在submit

中调用notifyTransactions()任务

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