Thread.sleep() 抛出的异常?

Crazy_AnBoo 2008-05-07 12:57:09

try {
sleep(1000);
}
catch (InterruptedException e)
{

}

有点不明白,sleep抛出的异常 ,如果任何线程中断了当前线程,

如果有两个线程,sleep()一次,是不是就会换另一个线程执行?换另一个线程执行的时候,前一个线程是不是应该抛出InterruptedException 来中断前一个线程呢?就是说前一个线程已经终止了?
...全文
1559 8 打赏 收藏 转发到动态 举报
写回复
用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()一次;不是去换另一个线程;而是小睡一下, 然后接着这个继续线程!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧