You're working too hard.
A blocking queue BLOCKS if there's nothing to read. Therefore if there is no command the command thread will simply pause and wait for the next command to be issued.
Your take command pops the first item off the queue. If there's no first item, the thread is paused. The if statement is unnecessary.
public void launch(){
ListeningExecutorService pool =
MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(threadNumber));
while(true){
Command newCommand = commandsQueue.take();
final ListenableFuture<String> future = pool.submit(new CommandWorker(newCommand));
}
}