请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

被阻塞的线程被调用了interrupted()之后的疑问

被阻塞线程抛出InterruptedException就立刻恢复成runnable状态,立马就拿到了cpu,怎么有一种强行抢到cpu执行权的感觉,如果我在catch(InterruptedException e)里写业务逻辑,是不是感觉能很鸡贼的能很快抢占cpu的使用权?还有就是如果要在catch()块里安全的结束线程,要调用什么方法呢?因为之前的run()里的业务可能才执行到一半,在catch()里结束线程不一样还是没执行完成业务逻辑?

正在回答

1回答

翔仔 2020-05-10 23:43:44

同学好,当一个方法抛出 InterruptedException 时,这意味着,如果执行该方法的线程被中断,它将尝试停止它正在做的事情而提前返回,并通过抛出 InterruptedException 表明它提前返回。 行为良好的阻塞库方法应该能对中断作出响应并抛出 InterruptedException,以便能够用于可取消活动中,而不至于影响响应。

所以InterruptedException并不会恢复runnable呀,取决于程序,该进锁池还是要进的。。

0 回复 有任何疑惑可以回复我~
  • 提问者 莨菽菽 #1
    老师好,平时我们创建单个线程Thread的时候,执行结束后线程对象和start()所创建的子线程是被GC回收了么?还有一个问题是为什么单个线程执行结束不用手动关,但是线程池要手动关呢,不能线程池也被GC自动回收就好了?
    回复 有任何疑惑可以回复我~ 2020-05-11 10:18:40
  • 翔仔 回复 提问者 莨菽菽 #2
    同学好,第一个问题,是会被自动回收的,但是前提是子线程执行完毕了。不然不回收就会内存泄露了:) 第二个问题,若线程池没有关闭,则会一直等待任务,不会出现程序退出的现象,所以即便主线程退出了,但是线程池还不会被回收,具体直接可以用一个main函数试试就知道了:)
    回复 有任何疑惑可以回复我~ 2020-05-12 10:52:35
  • 提问者 莨菽菽 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-05-12 17:26:21
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信