कृपया मुझे दो थ्रेड के बीच selector.wakeup();
विधि का एक कार्य उदाहरण प्रदान करें।जावा एनओ सिलेक्टर वेकअप
मैंने एक साधारण प्रोग्राम बनाने की कोशिश की जहां थ्रेड selector.select() विधि पर प्रतीक्षा कर रहा है। दूसरा धागा कुछ सॉकेट बनाता है और चयनकर्ता के साथ पंजीकरण करने की कोशिश करता है; जिस पर पहला धागा अवरुद्ध है।
इसलिए मुझे चयनकर्ता की wakeup
विधि का उपयोग करने की आवश्यकता है, लेकिन किसी भी तरह पहला थ्रेड ब्लॉकिंग मोड से बाहर नहीं आता है।
Wakeup विधि राज्यों के जावाडोक:
तो एक और धागा वर्तमान में Selector.select() या Selector.select (लंबी) के तरीकों में से एक मंगलाचरण में अवरुद्ध है तो कि मंगलाचरण वापस आ जाएगी तुरंत।
पीएस कुछ अन्य काम-आसपास हैं; उनमें से एक चुनिंदा (टाइमआउट) है लेकिन मैं यह पता लगाने की कोशिश कर रहा हूं कि गलती कहां है।
छद्म-कोड:
पहले थ्रेड:
static Selector selector = Selector.open();
while(true) {
int n = selectorGlobal.select();
selectorKeySet = selectorGlobal.selectedKeys().iterator();
while (selectorKeySet.hasNext()) {
selectionKey = selectorKeySet.next();
if (selectionKey.isReadable()) {
//do something
}
if(selectionKey.isAcceptable()) {
//accept
}
}
}
दूसरा थ्रेड:
while (itr.hasNext()) {
data = (String) itr.next();
String IP = data.get(0);
String Port = data.get(1);
SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(true);
boolean isConnected = socketChannel.connect(new InetSocketAddress(IP, Port));
ClassName.selector.wakeup();
SelectionKey selectionKey = SelectSockets.registerChannel(ClassName.selector,
socketChannel, SelectionKey.OP_READ);
}
धन्यवाद सेठ।अन्य सॉकेट से कनेक्ट करना एक ऐसी गतिविधि है जो बहुत ही कम हो रही है; इसलिए मैं किसी भी तरह से चयनकर्ता धागा चयन कुंजी पर गतिविधि हर समय कुछ संग्रह/चर की जांच नहीं करेगा। – Nilesh