Java 拒绝新连接而不关闭当前连接
我有一个守护进程,它被设计来接受来自现场设备的连接——它们使用命令/响应进行一些自定义通信 每次设备连接到端口时,我们都会生成一个线程来处理该通信。当通信结束时,每个线程都会自行停止并被破坏。通信可能持续几秒钟到几分钟。这些线程的繁殖是在一个永无止境的while循环中完成的,该循环创建了我们线程类的一个新实例,该实例在等待接受()到端口的连接时阻塞。当建立了一个连接时,线程繁殖了,循环返回开始另一个线程繁殖和接受() 当可能同时连接的数量相对较少时,这是可以接受的——但我们现在有成千上万的设备,它们可能都在试图同时通信(最坏的情况是肯定的,但仍然有可能) 我们希望在传递Thread.activeCount()的某个值后拒绝新的连接——从外部的角度来看,尝试打开套接字连接只会失败,因为端口未打开,连接被拒绝 下面的代码是一个高度简化的代码片段,我希望它能起作用,但实际发生的是,我们仍然接受来自外部的新连接,它们只是在activeCount下降并将连接传递给新线程之前不会连接到线程Java 拒绝新连接而不关闭当前连接,java,serversocket,Java,Serversocket,我有一个守护进程,它被设计来接受来自现场设备的连接——它们使用命令/响应进行一些自定义通信 每次设备连接到端口时,我们都会生成一个线程来处理该通信。当通信结束时,每个线程都会自行停止并被破坏。通信可能持续几秒钟到几分钟。这些线程的繁殖是在一个永无止境的while循环中完成的,该循环创建了我们线程类的一个新实例,该实例在等待接受()到端口的连接时阻塞。当建立了一个连接时,线程繁殖了,循环返回开始另一个线程繁殖和接受() 当可能同时连接的数量相对较少时,这是可以接受的——但我们现在有成千上万的设备,
while (1)
{
if (Thread.activeCount() < maxThreads)
{
new MyCustomThread(serverSocket.accept(), dataSource).start();
}
}
while(1)
{
if(Thread.activeCount()
当我的activeCount超过某个值时,是否有某种方法可以暂时关闭端口,从而拒绝新连接,而不终止任何正在进行的连接?在我看来,您似乎需要一个固定的线程池。我建议您使用Java中的“Executor Service”。在当前的用例中,这将对您有所帮助。@我想问题的关键不是让客户端等待连接建立或进入任何队列,而是强迫他们无法连接。解决方案可能是接受连接,然后检查MyCustomThread中是否达到了限制,如果为true,则关闭给定的套接字,不进行任何处理。serverSocket.accept().close();