【问题标题】:Java interrupt thread when reading socket [duplicate]读取套接字时的Java中断线程[重复]
【发布时间】:2011-09-04 04:29:55
【问题描述】:

可能重复:
How to terminate a thread blocking on socket IO operation instantly?

我有客户端在线程中运行,想要从 Java 中的套接字读取。但是在阅读时,也许我想杀死线程。所以我interrupt它,但是socket的读取方法会抛出InterruptedException吗?没找到。

那么,我怎样才能很好地要求线程在读取套接字时阻塞?

谢谢

【问题讨论】:

标签: java multithreading sockets network-programming interrupted-exception


【解决方案1】:

已回复How to terminate a thread blocking on socket IO operation instantly?

基本上,当你close()套接字时,所有关联的流都会关闭,导致所有被阻塞的操作都被解除阻塞。

或者你可以调用Thread.interrupt(),它会中断阻塞操作,导致它抛出InterruptedException

【讨论】:

  • 我可以从一个线程关闭套接字,而另一个阻塞在它的“读取”上吗?
  • 我用 Java 8 进行了检查,至少有 no InterruptedException 被抛出。 read 方法只返回(带-1)并设置了 Thread.interrupted() 标志。
【解决方案2】:

NIO 通道有InterruptableChannels,它将在阻塞操作时被中断。您可以将 NIO 与阻塞操作一起使用,因此它们的工作方式与 Java IO 大致相同,即您无需重新开发应用程序即可使用 Selectors/Dispatchers 等。

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 2017-01-21
    • 2016-10-05
    • 2014-07-20
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2021-03-04
    相关资源
    最近更新 更多