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)
as far as i can see, the boolean fields here can be simultaneously read/write by multiple threads. Without proper synchronization or at least volatile keyword, we have no promise that write to the field by one thread will be visible to other thread (A thread may not see the latest changes made by others). Or i can just add volatile keyword, what do you say?