Создайте несколько Jaxb2Marshaller
(скажем, пять), поместите их в пул (используйте LinkedBlockingQueue
). Когда вы создаете поток, передайте ему очередь.
Когда поток нужен, take()
один из очереди / пула. Когда пул пуст, потоки заблокируют этот вызов.
Когда поток завершается с использованием Jaxb2Marshaller
, put()
, он возвращается в очередь, чтобы другие потоки могли его использовать.
Если вы обнаружите, что потоки слишком часто блокируют в ожидании маршаллера, добавьте в очередь больше (см. Первый шаг). Таким образом, вы можете легко определить размер пула (или даже сделать его настраиваемым). Затем очередь автоматически распределяет их.