private Job<T> grabJob(){
  while (!queue.isEmpty()) {
    if (!limit.tryAcquire()) {
      return null;
    }
    final Job<T> job=queue.poll();
    if (job != null) {
      return job;
    }
    limit.release();
  }
  return null;
}

private Job < T > grabJob ( ) { while ( ! queue . isEmpty ( ) ) { if ( ! limit . tryAcquire ( ) ) { return null ; } final Job < T > job = queue . poll ( ) ; if ( job != null ) { return job ; } limit . release ( ) ; } return null ; }
does one of two things : 1 ) return a job and acquire a permit from the semaphore 2 ) return null and does not acquire a permit from the semaphore
