otherThread.join( time )
appears to wait time
in real milliseconds. I want to wait time
in actual CPU time so that I can get consistent behavior within my application.
I've done a quick look at ThreadMXBean
but that doesn't quite seem to have what I wanted ( it tells me the threads actual CPU time, but offers no convenient way to wait until some time has passed ) . A busy loop around a sleep()
could work, but seems grossly inefficient.
I also thought about using another thread and waiting on a Condition
, but I'm not sure how that would work. The main thread would do: myCondition.await()
, where another thread that would toggle myCondition
when otherThread
had used time
actual CPU time. Again, this seems complicated and would probably still require the controlling thread to have a busy loop.
Edit: I'm doing this for a grading script. This means that I need to have a way to timeout if the student is in an infinite loop and it needs to be fair. I've been using JUnit to run tests on students, but that has the same problem with timing out: if the same (inefficient) submission is run multiple times, it could possibly get different grades depending on what other jobs are running on the machine at the time (a real problem for group work).
But this is a problem with normal unit testing, too - by using clock time instead of CPU time JUnit gets inconsistent test results?