java thread

1.thread当在中断期间,当interrupt该thread对象时候,会throw InterruptedException.只是代表中断结束.thread并没有死
所以,如果业务上如果需要处理,可以在InterruptedException中处理
比如设置Thread.currentThread().interrupt().然后在业务模块的while语句中,增加interrupted()的判断
或者把InterruptedException包装后抛出
2.线程的四种状态:new ,runnable,blocked,dead
3.线程进入中断状态可能的操作:
3.1调用sleep
3.2调用wait
3.3调用suspend
3.4I/O中断
3.5调用一个同步方法,但是没有获取锁

4.死线程
run方法自然结束
没有抓取到的异常事件终止了run执行
stop方法
可以通过isAlive()方法判断是否处于可运行状态,如果是可运行或正在运行,为true.如果是新线程或则未成为可运行线程或者死线程则为false

5.当调用yield方法时候,当前thread变为可运行,所有的thread参与竞争.
  当调用sleep方法时,至少当前thread不会参与竞争.
  所以从理论上讲,yield方法调用后。低优先级的thread应该没有机会执行(但事实上至少在windows环境下依然看到低优先级thread被执行,不知道为何??)
  疑问:当当前thread一直在执行,如果是绿色线程的话,是不是一直会被执行下去,也即别的thread没机会执行?如果是本机线程,则应该会轮换的吧(至少从windows的测试来看是如此)
  因此,为了确保跨平台可以执行,都需要在循环中调用sleep或者yield方法
 
6.一般而言,如果需要执行多个操作,以便更新数据结构,以及需要从某个数据结构中检索某个值时,那么需要给其相应的方法做上
synchronized标志。这样可以保证在另一个thread能够使用同一个对象之前,这些操作会执行到停止为止。

7.调用原则:参考P51 《core java 5th》

8.thread的join方法的使用:
join(long mills):等待指定的thread不再是个活动的线程或者等待经过规定的毫秒数
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值