Hi Experts,
I am writing an application with NIO and Selector and found a strange
issue that if I call "Selector.close()" while a thread is being
blocked on that Selector(By calling "Selector.select()"), the call to
"close()" will block indefinitely until "Selector.select()" returns.
It's said in the Javadoc of selector.close() that: "If a thread is
currently blocked in one of this selector's selection methods then it
is interrupted as if by invoking the selector's wakeup method". So I
guess under no circumstances should Select.close() block, right?
However I came across another topic about the concurrency of Selector:
"The selection operations synchronize on the selector itself, on the
key set, and on the selected-key set, in that order.
The close method synchronizes on the selector and all three key sets
in the same order as in a selection operation." If it is true that
Selector.select() and Selector.close() both synchronize on the
selector itself, I think Selector.close() will block if other threads
are blocked on Selector.select().

Now I am confused about which one is the correct behavior of
Selector.close(), blocking or not?

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to