Копайте в сторону NIO. Можете здесь на русском поискать
www.youtube.com/user/KharkovITCourses/videos
Если подвисает раз в 20 сек., то скорее всего срабатывает GC. Можно попробовать добавить опцию -Xmx 1G при старте JVM, тем самым выделив 1G оперативки, тогда GC будет реже срабатывать.
Можно еще и сам GC потюнить, гуглите на тему GC CMS tuning или Java GC types для смены GC на какой-нибудь другой.