Calling halt on a consumer will finish processing current entry (or current entries if you're in the middle of a batch). This call is asynchronous (ie. the call can return before the consumer is properly stoped).
If you want to stop the consumer(s) when all pending entries have been processed:
1) stop publishing ;)
2) check consumers have processed the latest sequence number
3) Halt consumers when they have reached this sequence number
If you use Adrian's DisruptorWizard DSL you will see there is a halt method on the DisruptorWizard (but this does not guarantee all pending entries have been processed).
@LMAX guys: should the halt method on the wizard and on the batch consumer take the sequence number after which you release the consumer thread?
Olivier