每个实例或对象实例的java线程

时间:2013-07-03 18:12:32

标签: java multithreading

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

我的问题是,是否需要将每个对象放在自己的线程中,因为无论如何每个对象都会独立处理实时消息(日志等等)?

感谢您的回复。

2 个答案:

答案 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本身应该在所有消息处理对象之间共享,以便每个对象都将消息添加到同一队列(假设您有许多消息处理对象)。每个消息处理对象也可以有一个队列,但该决定取决于处理对象的数量以及有关如何处理消息的任何要求。

相关问题