Проблема, о которой вы упомянули, - это известная проблема Producer Consumer
Общим решением для этого является использование BlockingQueue
Пример использования в реальном мире приведен в AjaxYahooSearchEngineMonitor
Что делает поток A, так это отправляет строку в очередь, а затем сразу возвращает.
Что делает поток B, так это то, что один за другим он берет элемент из очереди и обрабатывает его.
Когда в очереди нет элемента, поток B просто будет ждать там. См. Строку 83 исходного кода.