Uncouple the input parsing code from IO and run the parsing in multiple concurrent threads.
This is relatively easy for GenePred or RefGene input, but more difficult for GTF files. GTF parsing requires a shared Hashmap because there is no defined order of the individual rows in the input.
Also another issue is to determine how many parallel threads to allow. Ideally, the number of threads should be specified by the caller and not be determined automatically.