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
继承 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