Waits until this job is finished. This method will block the calling thread until the job has finished executing, or until this thread has been interrupted. If the job has not been scheduled, this method returns immediately. A job must not be joined from within the scope of its run method.
If this method is called on a job that reschedules itself from within the run method, the join will return at the end of the first execution. In other words, join will return the first time this job exits the {@link #RUNNING} state, or as soon as this job enters the {@link #NONE} state.
If this method is called while the job manager is suspended, this job will only be joined if it is already running; if this job is waiting or sleeping, this method returns immediately.
Note that there is a deadlock risk when using join. If the calling thread owns a lock or object monitor that the joined thread is waiting for, deadlock will occur.
@exception InterruptedException if this thread is interrupted while waiting
@see ILock
@see IJobManager#suspend()