我想通过简单点的方法来得到客户端线程的数量,如果大于某个数就不再启动客户端线程,我想了个方法就是通过一个静态的变量,当客户端线程启动时自动加1,当大于规定的数时就不再启动客户端线程了,但一直没有实现,希望多多指教,最好能给段代码参考参考,非常感谢!

解决方案 »

  1.   

    直接使用ExecutorService es=Executors.newFixedThreadPool(int Threadnumber),在有可用线程之前,新任务将在队列中等待
      

  2.   

    C/S 模式一般都用 ServerSocket 建立一个服务器端
    ServerSocket 有个构造函数是这样的
    ServerSocket
    public ServerSocket(int port,
                        int backlog)
                 throws IOException利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。端口号 0 在所有空闲端口上创建套接字。 
    传入连接指示(对连接的请求)的最大队列长度被设置为 backlog 参数。如果队列满时收到连接指示,则拒绝该连接。 如果应用程序已指定服务器套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际套接字实现。否则创建“普通”套接字。 如果存在安全管理器,则首先使用 port 参数作为参数调用其 checkListen 方法,以确保允许该操作。这可能会导致 SecurityException 异常。 backlog 参数必须是大于 0 的正值。如果传递的值等于或小于 0,则使用默认值。 参数:
    port - 指定的端口;或者为 0,表示使用任何空闲端口。
    backlog - 队列的最大长度。 
    抛出: 
    IOException - 如果打开套接字时发生 I/O 错误。 
    SecurityException - 如果安全管理器存在并且其 checkListen 方法不允许进行该操作。
    设置最大的链接数 就可以控制与服务器端的通信进程个数
      

  3.   

        2楼的前辈你说的那种方法创建ServerSocket中的port和backlog是对应的吧?就是一个端口限制backlog个线程!如果我服务器端创建多个端口,但我想限制那么多端口的总线程数,比如说我客户端有20个端口,但我只能让5个客户线程连接,怎么实现?多多指教!
      

  4.   

    客户端请求连接时把MAC传过去,
    然后搞个HASHMAP,KEY是MAC,值是连接数