Предположим, что у меня есть метод Java, как:Предварительное создание объектов в отдельном потоке
public Ouput respond(Input input) { /* .. */ }
Объект Output
имеет много полей, - некоторые из этих полей зависят от Input
объекта, а остальные предопределены. Я хочу сделать поток, который вызывает respond()
, чтобы вернуться как можно быстрее.
Для этого я хочу, чтобы породить еще один поток, который предварительно-создает Output
объект, устанавливает некоторые из полей и помещает их в очередь, так что нить работает respond()
может забрать его из очереди, установите остальные поля и возврат Это.
Каков наилучший способ реализовать что-то подобное? Мой прототип использует ограниченный LinkedBlockingQueue
, но есть ли лучшие способы реализации этой идеи?
Моя цель - как можно быстрее получить метод respond()
, поэтому другие предложения, которые соответствуют этой цели, также приветствуются. :-)
Чтобы помочь вам оптимизировать метод, нам нужно будет увидеть код класса 'Output'; важно знать, о каких областях мы говорим. (Я говорю это, потому что кажется, что построение экземпляра 'Output' со значениями по умолчанию для кучи его полей не является столь трудоемким процессом ...) – delfuego
@delfuego Я составил код выше; фактический код более сложный, но мои тесты/профилирование показывают, что накладные расходы на строительство значительны. Класс 'Output' находится в третьей стороне lib, у источника, к которой у меня нет доступа. –
Почему связанный, а не массив? Я предположил бы (возможно наивно), что ArrayBlockingQueue работает немного лучше, чем LinkedBlockingQueue только потому, что реализация массива не имеет дополнительных накладных расходов на поддержание объектов ссылки. – Suppressingfire