【问题标题】:Kill a thread that is waiting for socket output杀死正在等待套接字输出的线程
【发布时间】:2011-05-26 02:30:28
【问题描述】:

嘿 作为项目的一部分,我必须编写一个小型 IRC 客户端来嵌入其中。一切正常,直到程序关闭并且从 IRC 通道读取输入的线程正在等待更多输入并且永不终止。

while(((inBuffer=in.readLine())!=null)&&(die==false))

inBuffer 只是一个字符串,in 是套接字上的缓冲读取器。 die 变量是一个布尔值,我的想法是我可以将它设置为 true,它会掉线。问题是“inBuffer=in.readLine()”一直坐在那里,直到它得到另一行。
有人可以帮帮我吗?

【问题讨论】:

    标签: java multithreading sockets blocking


    【解决方案1】:

    关闭in 流,readLine() 应立即返回null。

    【讨论】:

    • 我尝试创建一个名为 die() 的方法,它只是简单地执行了 in.close() 但后来我不得不让该方法声明它抛出 IOException 并将我调用 imReader.die() 的地方在一个根本不起作用的 try/catch 块内。
    • @Alex:尝试在 while 循环周围放置一个 try-catch-clause。
    【解决方案2】:

    forgot bufferedReader 有一个“ready()”方法来测试缓冲区中是否有任何内容。测试一下就行了。

    【讨论】:

    • 你很幸运。它只测试是否有一个字符。如果是只有一个字符,或者没有行终止符的部分行,readLine() 仍然会阻塞等待它。
    【解决方案3】:

    您可以在套接字上设置超时,如果遇到超时异常,您可以轮询 abort-flag。如果未设置,请重试阅读。

    【讨论】:

      【解决方案4】:

      关闭套接字以进行输入。这会将null 传递给readLine() 调用并终止循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多