ServerSocketChannel server = ServerSocketChannel.open();//打开一个服务端
        InetSocketAddress ip = new InetSocketAddress(port);
        server.socket().bind(ip);//绑定一个IP
        server.configureBlocking(false);//设置非阻塞模式
        System.out.println("11");
        //结果在这里,多次运行后,发现会在这里卡住动不了
        server.register(selector, SelectionKey.OP_ACCEPT);//注册监听
        System.out.println("22");
        server_list.add(server);
        server_ip_list.add(ip);
        System.out.println("服务器打开了:" + port + "端口");
        System.out.flush();

解决方案 »

  1.   

    selector是怎麼產生的?
    如下可以執行到完。ServerSocketChannel server = ServerSocketChannel.open();//打开一个服务端
            int port=8808;
            InetSocketAddress ip = new InetSocketAddress(port);
            server.socket().bind(ip);//绑定一个IP
            server.configureBlocking(false);//设置非阻塞模式
            System.out.println("11");
            //结果在这里,多次运行后,发现会在这里卡住动不了
            server.register(Selector.open(), SelectionKey.OP_ACCEPT);//注册监听
            System.out.println("22");
            //server_list.add(server);
            //server_ip_list.add(ip);
            System.out.println("服务器打开了:" + port + "端口");
            System.out.flush();
      

  2.   


    //        最后发现,先注册,后绑定IP就不会再出问题,为啥呢?        server.configureBlocking(false);//设置非阻塞模式
            System.out.println("11");
            server.register(selector, SelectionKey.OP_ACCEPT);//注册监听
            server.socket().bind(ip);//绑定一个IP           ///////////////////////////////
            System.out.println("22");
      

  3.   

    还没试过不停的建立ServerSocket然后用selector的。一直都是一个ServerSocket有一个专属的Selector。我只是试过不停的建立selector,最后系统资源不足死掉了
      

  4.   

    加上这句再试试看if(!server.socket().getReuserAddress()) {
        server.socket().setReuseAddress(true);
    }
      

  5.   

    查检出来了,是线程对Set操作不同步发生的错误