Get rid of null check of responseHandler, also add proper synchronizatio...

1. force method contract in ctor to avoid null check;
2. add proper synchronization;
3. make the class real internal by removing public keyword; (revert this)
@zxw1962 I'd be more for using AtomicBoolean, because if I understand the problem correctly, only race condition is that updated value of flags is not correctly propagated between threads. We don't need to synchronize whole methods, which is kind of slow. Am I right?