我有自定义类的对象实例,每个实例都为每个实例独立处理消息(通过方法)。没有实例与其他实例“对话”。
我的问题是,是否需要将每个对象放在自己的线程中,因为无论如何每个对象都会独立处理实时消息(日志等等)?
感谢您的回复。
答案 0 :(得分:1)
我的问题是,是否需要将每个对象放在自己的线程中 因为每个对象独立处理实时消息(日志 等等......)无论如何都要来了?
您需要在新的单独线程中处理每个对象获取的每条消息。这将导致快速处理对象的传入消息。因为,每个对象之间没有交互,因此不需要线程同步,这对您的应用程序有利。或者,更好的是使用线程池。看看ThreadPoolExecutor
答案 1 :(得分:0)
每个对象都有必需拥有自己的线程,但是,您可以通过拥有多个消息处理线程来提高性能。理想的线程数不一定(甚至可能)与处理对象的数量相同。
通常情况下,在您描述的情况下,方法是使用任务/消息处理队列,其中您将每个对象添加到队列中,然后多个线程按顺序处理队列中的项目。此处使用的线程数是可配置的,以便可以针对运行的平台优化应用程序。
实现此设计的一种简单方法是简单地使用ExecutorService
作为您的任务队列(在这种情况下,您的消息本身必须实现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
本身应该在所有消息处理对象之间共享,以便每个对象都将消息添加到同一队列(假设您有许多消息处理对象)。每个消息处理对象也可以有一个队列,但该决定取决于处理对象的数量以及有关如何处理消息的任何要求。