We really don't want to be synchronizing the read method.  That defeats the ability of using this ItemReader in a multithreaded environment.  Take a look at AtomicInteger as a way to better handle the synchronization here.