You seem to have a classical producer/consumer program.
The easiest way to solve this kind of problem is to have the producer (i.e. the parser, running in its own thread), store read items to a BlockingQueue, and have the consuler (i.e. the service, running in its own thread) read items from this BlockingQueue.
To signal the end of the parsing, you can use a specific object and add it to the queue, or change the state (in a thread-safe way) of a shared object, that the consumer check before reading the next item from the queue.