当前位置: 首页 > 面试题库 >

Java如何中断ServerSocket accept()方法?

冯玮
2023-03-14
问题内容

在我的主线程中,我有一个while(listening)循环,它调用accept()ServerSocket对象,然后启动一个新的客户端线程,并在接受新客户端时将其添加到Collection中。

我还有一个Admin线程,我想使用它发出诸如“ exit”之类的命令,该线程将通过侦听false来关闭所有客户端线程,关闭自身并关闭主线程。

但是,循环中的accept()调用会while(listening)阻塞,并且似乎没有任何方法可以中断它,因此,无法再次检查while条件,并且程序无法退出!

有一个更好的方法吗?还是以某种方式来中断阻塞方法?


问题答案:
  你可以close()从另一个线程进行accept()调用,该调用将引发SocketException。


 类似资料:
  • 问题内容: 问题 我正在通过ExecutorService运行某些外部方法的多次调用。我希望能够中断这些方法,但是不幸的是,它们不能自行检查中断标志。有什么办法可以强制从这些方法引发异常? 我知道从任意位置抛出异常是潜在的危险,在我的具体情况下,我愿意抓住这次机会并准备处理后果。 细节 “外部方法”是指某些来自外部库的方法,并且我无法修改其代码(可以,但是,每当发布新版本时,这都会成为维护的噩梦)

  • 我试图调用Java方法。此方法声明为 没有关于参数可空性的附加注释或注释。事实上,它只是将放入,因此有效地可能是。 但是,Kotlin编译器将类型视为(而不是预期的),并在使用传递时失败 通过

  • 问题内容: 我正在尝试停止线程,但是我不能这样做: 因此,即使我调用方法“停止”,线程也不会停止。它一直活着。 如何中断/停止该线程? 更新 (@little方法) 中间件类: 但是,当我尝试停止线程时,它没有。 上面的代码有什么问题? 问题答案: 确实没有必要使用标志。相反,只需使用来查询线程的状态。另外,为什么还要将线程对象包装在另一个线程对象中?对我来说,这似乎完全没有必要。 这是你应该做的

  • 问题内容: 下面的方法完美无瑕 但是我没有指定此方法中的 是什么。编译器如何将 方法返回的值分配给 未指定类型i 的变量? 我只是测试了答案的有效性,指出了从该方法的返回类型推断出的答案。它似乎没有解决。请检查以下代码。它甚至不编译 再次修改源代码并对其进行测试,结果导致编译时错误 问题答案: 该方法如何推断类型 没有。泛型方法不推断其泛型类型-这就是为什么称为 类型参数 的原因。方法的 调用者

  • 由于使用stop()方法停止线程非常的暴力,人家线程运行的好好的,突然就把人家杀死了,线程占用的锁被强制释放,极易导致数据的不一致性。因此,提出了一种温和的方式:请求另外一个线程不要再执行了,这就是中断方式。 假设某个线程要不停地处理某件事情(比如 i 一直自增),但是还有个要求:在处理事情前,先要检查下这个线程是否被中断,如果已经被中断,处理就应该结束。 public class Run {

  • 问题:我订阅了一个永无止境的消息服务,我的代码需要检查任何消息是否满足条件,如果满足,然后在处理所有消息并返回true之前关闭订阅。如果我已经处理了所有的消息,但条件不满足,那么我需要关闭订阅并返回false。 例如,条件是: 我使用的订阅有一个同步方法,我必须传递。下面是适用于这两种情况的功能代码,跟踪最后一次接收消息的时间(以标识消息的结尾),告诉我是否获得了数据: 更多信息:的类型是(来自N