2013-09-19 7 views
0

Скажем, я запускаю многопоточную программу, сервер, и это обрабатывает входящие запросы в разных потоках (по одному на запрос). У меня есть объект RequestHandler, который может обрабатывать один запрос с методом,Должен ли вы создать новый объект для каждого потока?

void handleRequest(Request r); 

говорят, что нет никаких проблем параллелизма с точки зрения повторного использования одного объекта RequestHandler между потоками. Будет ли когда-нибудь какое-либо преимущество в производительности при создании одного запроса в потоке? Или лучше использовать один RequestHandler между потоками (каждый из которых поддерживает ссылку на тот же RequestHandler)?

Редактировать: В ответ на ответ Джека - да, мы предполагаем, что метод handleRequest полностью потокобезопасен и не содержит никакого блока или объекта синхронизации.

ответ

4

Если реализация handleRequest(Request r) полностью потокобезопасна и не содержит какого-либо блока или объекта синхронизации, я не вижу никаких преимуществ/недостатков в использовании единого общего объекта по сравнению с отдельными объектами.

Это означает, что объект, который реализует handleRequest, не имеет никакого изменчивого состояния, конечно.

Каждый поток может вводить метод самостоятельно, следуя его коду, это будет то же самое с несколькими объектами, но у вас будут разные ссылки this (если только метод не равен static). Теперь, если код является потокобезопасным, почти ничего не делается через неявный справочник this, если не вызвать другие потокобезопасные методы, поэтому он эквивалентен.

Смежные вопросы