Самый простой способ сделать это - передать каждую строку во второй поток. например через PipedInputStream.
В будущем вы сможете использовать продолжения в Java 8 или 9 или? использовать парсер в той же теме.
Синтаксический анализатор SAX должен выдавать вам все возможные события для строк, которые вы ему дали.
Кстати: в прошлом я писал для этого push-парсер, но я не знаю ни одного стандартного синтаксического анализа SAX, который делал бы это в одном потоке.