Thread概念整理

1. 两种方式实现
继承 java.lang.Thread和实现Runnable 接口。(好像推荐前者的比较多);
2. 线程状态: new->runnable->running->dead
创建之后为new,调用start后为runnable(注意此时还没有run),系统执行时为running。 在Thread执行完毕或者出现异常(抛出RuntimeException)时,Thread终止。此时状态为dead,此时如果通过start来调用它会抛出RuntimeException异常 :wink:
如果thread在等待资源,或者在试图获得互斥体的时候被阻塞,Thread决定睡眠,进入block状态。在当睡眠周期到期、预期输入到达,或者互斥体当前的拥有者将其释放并通知等候Thread可以再次夺取互斥体时,阻塞的线程重新进入 runnable 状态。系统就可以继续执行了。
有个图很好,是Javaeye论坛上另外一位老兄的,我只链接到这个图:
[img]http://www.iteye.com/topics/download/2803608e-b6f9-3ac8-8784-fad314b98cda[/img]

3. 典型的操作系统支持方式分为两种:协作式和抢占式。
在协作式中,Thread对于占用CPU多长时间,什么时候结束有最终意见。([i]需要了解一下这个最终意见是什么[/i]).
抢占式则系统采用基于时钟可以强行从一个Thread转移到另外一个Thread,可以防止独占的发生。

4. 四个常见缺陷
争用条件:多个线程之间存在对共享资源的竞争,而胜出者决定系统的行为。因为恭喜资源受到了多个线程的影响,不会按照系统预想的方式运行。
死锁,两个线程之间互相等待。条件永远不能为真。
活动锁:(这是一个有趣的概念 :D )一个简单的示例就是:每个线程已经拥有了一个对象,同时需要另外一个线程拥有的另外一个对象。可以想像这样的情况:每个线程放下自己拥有的对象,捡起另外一个线程放下的对象。
资源耗尽:。。。

5. lock简单原则
[quote]Always lock during updates to object fields.
Always lock during access of possibly updated object fields.
Never lock when invoking methods on other objects.
[/quote]

参考资料:
《Java.Concurrency.in.Practice》
http://www.ibm.com/developerworks/cn/java/j-csp1.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值