社区
Java SE
帖子详情
Thread.sleep() 抛出的异常?
Crazy_AnBoo
2008-05-07 12:57:09
try {
sleep(1000);
}
catch (InterruptedException e)
{
}
有点不明白,sleep抛出的异常 ,如果任何线程中断了当前线程,
如果有两个线程,sleep()一次,是不是就会换另一个线程执行?换另一个线程执行的时候,前一个线程是不是应该抛出InterruptedException 来中断前一个线程呢?就是说前一个线程已经终止了?
...全文
1559
8
打赏
收藏
Thread.sleep() 抛出的异常?
try { sleep(1000); } catch (InterruptedException e) { } 有点不明白,sleep抛出的异常,如果任何线程中断了当前线程, 如果有两个线程,sleep()一次,是不是就会换另一个线程执行?换另一个线程执行的时候,前一个线程是不是应该抛出InterruptedException 来中断前一个线程呢?就是说前一个线程已经终止了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangxiao_yan
2012-02-22
打赏
举报
回复
嘿嘿 顶~
huxinyu929
2008-05-07
打赏
举报
回复
[Quote=引用 4 楼 jiangnaisong 的回复:]
引用楼主 Crazy_AnBoo 的帖子:
无论如何不要带着锁去睡觉
[/Quote]
学习~~了~
a_nuo
2008-05-07
打赏
举报
回复
顶四楼的
yxh1226
2008-05-07
打赏
举报
回复
顶
云上飞翔
2008-05-07
打赏
举报
回复
[Quote=引用楼主 Crazy_AnBoo 的帖子:]
try {
sleep(1000);
}
catch (InterruptedException e)
{
}
有点不明白,sleep抛出的异常 ,如果任何线程中断了当前线程,
如果有两个线程,sleep()一次,是不是就会换另一个线程执行?换另一个线程执行的时候,前一个线程是不是应该抛出InterruptedException 来中断前一个线程呢?就是说前一个线程已经终止了?
[/Quote]
答:
1)若线程A执行了sleep(1000);则线程A放弃了CPU,进入了“睡眠态”。此时,CPU会切换给其它线程。即:线程B将会拿到CPU进行运行。
2)当线程A睡眠1000毫秒的时间到了,则线程A从“睡眠态”转成“运行态”,但不能保证线程A一定会得到CPU马上运行(因为可能线程B正在CPU上运行)。
3)若线程A还没有睡眠到1000毫秒就被另外一个线程C打断,则此时线程A将抛出InterruptedException ;此时线程A从“睡眠态”转成“运行态”,但不能保证线程A一定会得到CPU马上运行(因为可能线程B正在CPU上运行)。
4)若线程A拥有一把锁,则线程A去sleep()是带着锁去睡眠的。因此:
无论如何不要带着锁去睡觉
。
以上仅供你参考
anqini
2008-05-07
打赏
举报
回复
把这个理解成,停顿一会,控制权不给别人,睡醒了自己继续执行自己!
a_nuo
2008-05-07
打赏
举报
回复
如果有两个线程,sleep()一次,是不是就会换另一个线程执行?
不是,虽然它sleep了单没有释放锁,它只是暂时停止执行了
换另一个线程执行的时候,前一个线程是不是应该抛出InterruptedException 来中断前一个线程呢?就是说前一个线程已经终止了?
前一个线程不会抛出InterruptedException ,只有当另一个线程中断了当前线程是才会抛出此异常
当抛出该异常时,当前线程的中断状态 被清除,但不一定终止!
frank3G
2008-05-07
打赏
举报
回复
如果有两个线程,sleep()一次,是不是就会换另一个线程执行?换另一个线程执行的时候,前一个线程是不是应该抛出InterruptedException 来中断前一个线程呢?就是说前一个线程已经终止了?
-------------------------------------
sleep()一次;不是去换另一个线程;而是小睡一下, 然后接着这个继续线程!
java
sleep
抛出
异常
_PowerMockito模拟
Thread
.
sleep
()时
抛出
中断
异常
的场景
点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号。并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧。大家想买什么书扫描下方的加他拉你加群。最后,非常感谢大家的关注。 想要在单元测试时,模拟
Thread
.
sleep
()时
抛出
中断
异常
的行为,但是仅使用PowerMockito.mockStatic(
Thread
...
Thread
.
sleep
()为什么要
抛出
中断
异常
当然是为了让你的代码具有响应中断信号的能力! 目录 从场景说起 响应中断 关闭线程池 从场景说起 假设
sleep
()方法不
抛出
中断
异常
,也就是线程没有中断响应能力,会怎么样? 考虑如下场景: 线程A:
sleep
中 线程B:A别睡了,要关机啦(向A发送中断信号) 线程A:
sleep
中 这样好吗?这不好。因为线程A对外界情况没有感知能力。 中断就起到了这样的作用:让线程具有感知的能力。
sleep
(),wait()等方法都需要你去处理中断
异常
,也就是需要你的代码能够响应中断。 响应中断
调用方法有
抛出
异常
的解决办法
由图可见,
Thread
.
sleep
方法是有
抛出
异常
的,但是调用它的chase方法是没有
抛出
异常
的,所以
Thread
.
sleep
方法会报错; 两种方法: 1.本方法也
抛出
一个
异常
:throw Exception; 由图可见,本方法
抛出
异常
后,就不再报错; 缺点:那么后续调用本方法的方法也需要进行
抛出
异常
; 2.利用try{}catc(){}; 这样也可以解决报错; ...
java
sleep
异常
_java – 为什么需要处理
Thread
.
sleep
()的
异常
?
如果以一种方式声明方法可以
抛出
已检查的
异常
(
异常
不是RuntimeException的子类),调用它的代码必须在try-catch块中调用它,或者调用方法必须声明
抛出
它.public static void
sleep
(long millis) throws InterruptedException;为什么
Thread
.
sleep
()以这种方式声明?因为如果
Thread
正在睡眠,线程可能被中断,例...
问九:源码层面解析
Thread
.
sleep
()为什么需要抛
异常
?
结合此篇文章进行阅读:InterruptedExcption详细分析 导入:
Thread
.
sleep
()抛的是InterruptedException,这个错误在源码中的注释为: * Thrown when a
thread
is waiting,
sleep
ing, orotherwise occupied, * and the
thread
is interrupted, e...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章