java多线程之13关于多线程上的join方法的用途

Thread的善后工作

一个已经完成run()方法的thread是已经终结的,它不再是活跃的(isAlive()这个method会返回false)然而,thread对象本身可能还会带有其他有意义的作用或信息。只要其他还在运作中的对象持有对已经终结了的thread对象的引用,其他的thread就能够运行已经终结了的thread对象的相应的method来获得某些有意义的操作与信息。
如果代表已经终结thread的对象超出其生命周期的scope,则该thread对象就会被garbage collected.在某些平台上,这同时会有清理与该thread关联的占用的系统资源的效果。
一般来说,之后你就不应该再占据该thread的引用以便让该thread在终结时能够被垃圾回收。

注意:一个还要占据thread引用的理由是要判断该thread(及任务task)是否已经完成工作,那可以用join()这个方法来完成。
join()方法经常用在当有一个已经开始执行独立task的thread,且想知道是否该task已经完成时。

join()方法有个特点:join()方法会被block(阻塞)住直到调用它的那个thread对象执行完毕了它的run()方法为止,如果thread已经完成了它的run()那么,调用thread.join()
方法不会被阻塞,及join()方法就会立即返回。这意味着你可以任意地调用join()来观察thread是否已经终结。但要小心,join()方法调用经常会被block住直到thread的run()方法真正完成为止,由于性能和编程的优雅性的考虑你最好不要对thread一直使用join()方法来看它是否还在运行,建议使用thread.isAlive()方法来查看一个thread对象是否还在执行它的run()方法还是已经完成(终结了)。这要根据isAlive()的返回值来判断。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值