@Override protected synchronized void onRequesting() { if (!owningTasks.isEmpty() || !requestingTasks.isEmpty()) { Tasks.setBlockingTask( !requestingTasks.isEmpty() ? Iterables.getLast(requestingTasks) : Iterables.getFirst(owningTasks, null) ); Tasks.setBlockingDetails("Waiting on semaphore "+getName()+" ("+getDescription()+"); " + "queued at "+Time.makeDateString()+" when "+getRequestingThreads().size()+" ahead in queue"); } requestingTasks.addIfNotNull(Tasks.current()); super.onRequesting(); }