My understanding is that this is used as a flag to indicate to the SSLEngine handling code that the initial handling call has been called. There are no guarantees these happen on the same thread, so the volatile is supposed make this boolean read/write an atomic operation. It may be unnecessary since it is always accessed in a sync block, but the sync block ins't synchronized on that object, so I wasn't sure.