У меня есть архитектура взаимодействия сервер-клиент, где есть один сервер и 150 клиентов. Связь сервер-клиент происходит через Java NIO, где все клиенты отправляют те или иные данные каждые 10 секунд.Раньше мы ставили в очередь все сообщения процесса и обрабатывали все сообщения в одном потоке, так как количество клиентов больше, так как сообщения, сервер не может обрабатывать все сообщения мгновенно, и существует задержка обработки данных в очередипотеря.Поэтому я подумал о реализации CachecThreadPool для одновременной обработки задач, как только они появятся. Я выбрал CachedThreadPool вместо FixedThreadPool, потому что задачи недолговечны и их много, ниже приведен код для этого.Поток, который получает сообщения от клиентов, звонит ProcessorClass.processData(message)
, как только получает сообщение.
public class ProcessorClass{
private static final Logger LOGGER = Logger.getLogger(ProcessorClass.class);
static ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();
public static void processData(StringBuffer message) {
Runnable task = new Runnable() {
@Override
public void run() {
try {
LOGGER.info("Queue size:"+executor.getQueue().size());
if (message != null){
processMessage(message);
}
}
catch(Exception e) {
LOGGER.error("Error happened in run() method" + e.getMessage());
}
}
};
executor.execute(task);
}
public static void processMessage(StringBuffer message){
// all the processing of message such as DB operations goes here.
}
}
Сомнения:
1.How CachedThreadPool stores the message in the queue because i haven't defined any explicitly.
2.Should i chose FixedThreadPool over this?
3.Should i make my processMessage() method synchronized?
Все предложения и комментарии рецензии приветствуются.