1

我有一个自定义类的对象实例,每个实例处理每个实例独立通过的消息(通过方法)。没有实例与其他实例“交谈”。

我的问题是,是否有必要将每个对象放在自己的线程中,因为每个对象都独立处理通过的实时消息(日志等)?

感谢您的任何回复。

4

2 回答 2

1

我的问题是,是否有必要将每个对象放在自己的线程中,因为每个对象都独立处理通过的实时消息(日志等)?

您需要在新的单独线程中处理每个对象获取的每条消息。这将导致快速处理您的对象的传入消息。而且由于每个对象之间没有交互,因此不需要线程同步,这对您的应用程序有好处。或者,最好使用线程池。看一下ThreadPoolExecutor

于 2013-07-03T18:22:20.180 回答
0

不一定每个对象都有自己的线程但是,您可以通过拥有多个消息处理线程来提高性能。理想的线程数不一定(甚至可能)与处理对象的数量相同。

通常,在您描述的这种情况下,该方法将使用任务/消息处理队列,您拥有的每个对象都将任务添加到队列中,然后多个线程按顺序处理队列中的项目。此处使用的线程数是可配置的,以便应用程序可以针对其运行的平台进行优化。

实现此设计的一种简单方法是简单地使用 aExecutorService作为您的任务队列(在这种情况下,您的消息本身必须实现Runnable):

// For 2 threads, adjust as appropriate.
ExecutorService executor = Executors.newCachedThreadPool(2);

然后添加一条Runnable消息:

// Add a message to the queue for concurrent / asynchronous processing
executor.submit(message);

请注意,它executor本身应该在所有消息处理对象之间共享,以便每个对象都将消息添加到同一个队列(假设您有许多消息处理对象)。每个消息处理对象也可以有一个队列,但该决定将取决于处理对象的数量以及有关如何处理消息的任何要求。

于 2013-07-03T18:34:38.623 回答