public CompilerThread grabCompilerThread ( ) throws InterruptedException { available . acquire ( ) ; if ( compilers . empty ( ) ) { return new CompilerThread ( this ) ; } return compilers . pop ( ) ; }
Acquire a compiler thread from the pool or block until a thread is available . If the pools is empty create a new thread but never more than is available .