热门搜索: 新浪 网易爸爸 阿里妈妈 百度爷爷 新浪 网易爸爸 阿里妈妈 百度爷爷 新浪

当前位置:首页 > 数码配件 > 正文

Java NIO 类库Selector机制解析

作者:  数码之家 | 发布时间:  2009年6月17日 | 栏目:  (数码配件)

 

Java NIOSelector LinuxWindows2)Selectorwakeup()select() 
1)SunJVMSelector
WindowsSunJavaSelector.open()loopbackTCPLinuxSelectorpipeSelector.wakeup()select()TCP 
TCPWindowsWindowsJavaSelectorloopbackTCP 
GDBJavaJavaGNUgijgcjJavaJava 
GNUJavaSunJVMGNUJava/LinuxUnix System VWindowsGNUgijSelector.open()Selector.wakeup() 
 
SocketRunnablerun()sSelector 
 
        //生成一个侦听端
        ServerSocketChannel ssc = ServerSocketChannel.open();
        //将侦听端设为异步方式
        ssc.configureBlocking(false);
        //生成一个信号监视器
        s = Selector.open();
        //侦听端绑定到一个端口
        ssc.socket().bind(new InetSocketAddress(port));
        //设置侦听端所选的异步信号OP_ACCEPT
        ssc.register(s,SelectionKey.OP_ACCEPT);
  
        System.out.println("echo server has been set up ......");
 
        while(true){
            int n = s.select();
            if (n == 0) { //没有指定的I/O事件发生
               continue;
            }    
            Iterator it = s.selectedKeys().iterator();    
            while (it.hasNext()) {
                SelectionKey key = (SelectionKey) it.next();
                if (key.isAcceptable()) { //侦听端信号触发
                     …… …… ……
                     …… …… ……
                }  
                if (key.isReadable()) { //socket可读信号
                     …… …… ……
                     …… …… ……                   
                }    
                it.remove();
            }
         }


 
 
Selector.wakeup()select() 
 
new Thread(this).start();
try{
    //Sleep 30 seconds
    Thread.sleep(30000);
    System.out.println("wakeup the select");
    s.wakeup();
}catch(Exception e){
        e.printStackTrace();
}
 
 
Socket30select()straceSelectorwakeup() 
1)gcjsunjavacclassgij2)gcjgcjGDBJava 
lsofpipeGNUUnixCselect()pthread_kill()strace 
stracewakeup the selectwakeup


标签:数码  科技  网络