采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
被阻塞线程抛出InterruptedException就立刻恢复成runnable状态,立马就拿到了cpu,怎么有一种强行抢到cpu执行权的感觉,如果我在catch(InterruptedException e)里写业务逻辑,是不是感觉能很鸡贼的能很快抢占cpu的使用权?还有就是如果要在catch()块里安全的结束线程,要调用什么方法呢?因为之前的run()里的业务可能才执行到一半,在catch()里结束线程不一样还是没执行完成业务逻辑?
同学好,当一个方法抛出 InterruptedException 时,这意味着,如果执行该方法的线程被中断,它将尝试停止它正在做的事情而提前返回,并通过抛出 InterruptedException 表明它提前返回。 行为良好的阻塞库方法应该能对中断作出响应并抛出 InterruptedException,以便能够用于可取消活动中,而不至于影响响应。
所以InterruptedException并不会恢复runnable呀,取决于程序,该进锁池还是要进的。。
老师好,平时我们创建单个线程Thread的时候,执行结束后线程对象和start()所创建的子线程是被GC回收了么?还有一个问题是为什么单个线程执行结束不用手动关,但是线程池要手动关呢,不能线程池也被GC自动回收就好了?
同学好,第一个问题,是会被自动回收的,但是前提是子线程执行完毕了。不然不回收就会内存泄露了:) 第二个问题,若线程池没有关闭,则会一直等待任务,不会出现程序退出的现象,所以即便主线程退出了,但是线程池还不会被回收,具体直接可以用一个main函数试试就知道了:)
非常感谢!
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.9k 27
2.8k 22
1.3k 15
1.5k 14
1.4k 14
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号