关于这句话的理解,有关多线程的interrupt

时间:2022-01-20 16:25:55
在《Java核心技术 卷II》第7章多线程里有这样一段代码:

public void run()
{
    try
    {
        ...
        while(more work to do)
        {
            do more work
        }
    }
    catch(InterruptedException exception)
    {
        //thread was interrupted during sleep or wait
    }
    finally
    {
        cleanup ,if required
    }
    //exit run method and terminate thread
}

书中说:“这个代码框架存在一个问题,如果在线程处于睡眠或者等待状态时调用interrupt方法,那么将不会产生任何InterruptedException事件”。
-----------------------------------------------------------------------------------------
上面这句话该怎么理解,interrupt方法的作用不就是:如果一个线程被调用的sleep或wait所中断,调用interrupt将产生一个InterruptException事件吗?脑袋晕了,谁给说明说明啊

7 个解决方案

#1


一不小心发了2个......

#2


这是说这个异常并不一定发生,也就是说存在偶然性。软件不能依赖于偶然性,因此这个东西就是靠不住的。作者是告诉你不要这么干。

#3


明显相悖的2句话嘛。。。

#4


catch(InterruptedException exception)
    {
        //thread was interrupted during sleep or wait
    }
因为你没有处理这个异常,调用者当然不知道这个异常的存在了

#5


根据书中所说,要改成这样:
while(!interrupted() && more work to do)
{
     do more work
}
需要调用interrupted方法来确定它最近是否被中断了

#6


哈哈 
  兄弟   我今天上午也是被这句话卡了 我硬是想不通

#7


这样可以保证万无一失.我认为

#1


一不小心发了2个......

#2


这是说这个异常并不一定发生,也就是说存在偶然性。软件不能依赖于偶然性,因此这个东西就是靠不住的。作者是告诉你不要这么干。

#3


明显相悖的2句话嘛。。。

#4


catch(InterruptedException exception)
    {
        //thread was interrupted during sleep or wait
    }
因为你没有处理这个异常,调用者当然不知道这个异常的存在了

#5


根据书中所说,要改成这样:
while(!interrupted() && more work to do)
{
     do more work
}
需要调用interrupted方法来确定它最近是否被中断了

#6


哈哈 
  兄弟   我今天上午也是被这句话卡了 我硬是想不通

#7


这样可以保证万无一失.我认为