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
}
因为你没有处理这个异常,调用者当然不知道这个异常的存在了
{
//thread was interrupted during sleep or wait
}
因为你没有处理这个异常,调用者当然不知道这个异常的存在了
#5
根据书中所说,要改成这样:
while(!interrupted() && more work to do)
{
do more work
}
需要调用interrupted方法来确定它最近是否被中断了
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
}
因为你没有处理这个异常,调用者当然不知道这个异常的存在了
{
//thread was interrupted during sleep or wait
}
因为你没有处理这个异常,调用者当然不知道这个异常的存在了
#5
根据书中所说,要改成这样:
while(!interrupted() && more work to do)
{
do more work
}
需要调用interrupted方法来确定它最近是否被中断了
while(!interrupted() && more work to do)
{
do more work
}
需要调用interrupted方法来确定它最近是否被中断了
#6
哈哈
兄弟 我今天上午也是被这句话卡了 我硬是想不通
兄弟 我今天上午也是被这句话卡了 我硬是想不通
#7
这样可以保证万无一失.我认为