Thread.yield() will only work if there are other threads with the same priority otherwise the request is ignored.
All the well designed timers use the yield command in conjunction with a high precision clock, the problem with that is you will not be able to fix your framerate if your thread is the only one running with the same priority.
The issue hasn’t occured as of yet because even if you don’t use AWT/Swing there are other things running behind the scenes but what happens if in future all these things were no longer required and the only thread running is your own?
Everytime you load your game it will load it’s own instance of the JVM, if you aren’t using Swing/Awt then the only thread running will be your own and your timer will not work.
Other than going straight to JNI or using sleep(because it’s innacurate) what other alternatives are there to Thread.yield()?