I do believe that you're referring to
GAGETimer. sleepUntil() works by using Thread.yield() to give time to other threads/programs while still using anything that noone else wants.
This is not a problem! It is a feature. You see, using thread sleeping can result in your application having inaccurate timing. Inaccurate timing leads to animation that is less than smooth.
Fortunately, this is only necessary for non-vsynced games. VSyncing blocks the thread until the monitor refreshes. So what's the downside? VSyncing is currently only available on Windows in full-screen exclusive mode. All other cases need some sort of frame limiting method. You will need to choose the method that works best for you and your game.
EDIT: BTW, your timer thread method is not only highly inaccurate, it's likely to not be able to generate 60+ fps on most machines. It *may* work for 30 fps, but given the Windows 10-50ms resolution for System.currentTimeMillis(), I doubt it. (10ms allows you to time 100fps, but in a very inaccurate fashion. 50ms for the 9x OSes can't even do 20fps. Look for the "New Timer Algorithm" thread for more info.)