[多线程]关于Thread.sleep抛出的异常

jkleeo 2009-10-30 11:06:29
我是这么理解的,不知道对不对,请高手来看下啦:)

try {
Thread.sleep(1000);
} catch (InterruptedException e) { //我感觉这个异常的含义是
//想睡没睡成,正要躺下的时候,枕头被人拿走了
//一旦睡成了,是不会抛出异常的,因为线程被阻塞了
e.printStackTrace();
}
...全文
989 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jkleeo 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 garl2011 的回复:]
你可以理解成本来打算睡10个小时的,结果睡了5个小时被叫醒了。
事实上很多程序都是通过抛出 InterruptedException 来让线程终止执行的。
thread.interrupt()的动作就是抛出该exception。
[/Quote]

这个有问题吧?线程既然已经睡了,就不再占用CPU了,也就无所谓阻塞了吧?

还有一个问题了:既然已经睡了,那么到底是谁叫醒的呢?
loveofmylife 2009-10-30
  • 打赏
  • 举报
回复
理解是不对的,sleep的阻塞是可以被打断的,而i/o和synchronize的阻塞是不能被interrupt()的
只能用这种捕捉异常的方式来打断执行的线程
gordonkkk 2009-10-30
  • 打赏
  • 举报
回复
我认为不能这么理解
没抛异常说明睡的很正常,抛异常说明中途被叫醒了。
这里异常其实不是真正意义上的“不正常的状态”,而是把异常用来控制流程了。
stamp80 2009-10-30
  • 打赏
  • 举报
回复
可以这么理解。我认为确切说应该是sleep没有睡足指定的时间
Henry..D 2009-10-30
  • 打赏
  • 举报
回复
当你的但前线程被阻塞了的话,这是调用sleep()方法则回报该异常的。
yekai012 2009-10-30
  • 打赏
  • 举报
回复
这个是java系统中唯一一个不是异常的异常。
wsywl 2009-10-30
  • 打赏
  • 举报
回复
学习一下。
garl2011 2009-10-30
  • 打赏
  • 举报
回复
你可以理解成本来打算睡10个小时的,结果睡了5个小时被叫醒了。
事实上很多程序都是通过抛出 InterruptedException 来让线程终止执行的。
thread.interrupt()的动作就是抛出该exception。

62,620

社区成员

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

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