1. 两种方式实现
继承 java.lang.Thread和实现Runnable 接口。(好像推荐前者的比较多);
2. 线程状态: new->runnable->running->dead
创建之后为new,调用start后为runnable(注意此时还没有run),系统执行时为running。 在Thread执行完毕或者出现异常(抛出RuntimeException)时,Thread终止。此时状态为dead,此时如果通过start来调用它会抛出RuntimeException异常
如果thread在等待资源,或者在试图获得互斥体的时候被阻塞,Thread决定睡眠,进入block状态。在当睡眠周期到期、预期输入到达,或者互斥体当前的拥有者将其释放并通知等候Thread可以再次夺取互斥体时,阻塞的线程重新进入 runnable 状态。系统就可以继续执行了。
有个图很好,是Javaeye论坛上另外一位老兄的,我只链接到这个图:
3. 典型的操作系统支持方式分为两种:协作式和抢占式。
在协作式中,Thread对于占用CPU多长时间,什么时候结束有最终意见。(
需要了解一下这个最终意见是什么).
抢占式则系统采用基于时钟可以强行从一个Thread转移到另外一个Thread,可以防止独占的发生。
4. 四个常见缺陷
争用条件:多个线程之间存在对共享资源的竞争,而胜出者决定系统的行为。因为恭喜资源受到了多个线程的影响,不会按照系统预想的方式运行。
死锁,两个线程之间互相等待。条件永远不能为真。
活动锁:(这是一个有趣的概念
)一个简单的示例就是:每个线程已经拥有了一个对象,同时需要另外一个线程拥有的另外一个对象。可以想像这样的情况:每个线程放下自己拥有的对象,捡起另外一个线程放下的对象。
资源耗尽:。。。
5. lock简单原则
引用
Always lock during updates to object fields.
Always lock during access of possibly updated object fields.
Never lock when invoking methods on other objects.
参考资料:
《Java.Concurrency.in.Practice》
http://www.ibm.com/developerworks/cn/java/j-csp1.html
分享到:
相关推荐
在 Java 语言中,对进程和线程的封装,分别提供了 Process 和 Thread 相关的一些类。本文首先简单的介绍如何使用这些类来创建进程和线程,然后着重介绍这些类是如何和操作系统本地进程线程相对应的,给出了 Java ...
27 标记整理算法(Mark-Compact).................................................................................................. 28 分代收集算法 ..........................................................
标记整理算法(Mark-Compact).................................................................................................. 28 分代收集算法 ..............................................................
整理每天学习的内容。 :light_bulb: 内容 :triangular_flag: 网页 2. 3. 4. 5. 6. 7.Spring 8. Django :triangular_flag: 安卓 1,大数据 2. Android :triangular_flag: 网络 1.网络 :triangular_flag:...
勿在浮砂筑高台 第1章 Win32程序基本概念 Win32程序开发流程 需要什么函数库(.LIB) 需要什么头文件(.H) 以消息为基础,以事件驱动之(message based,event driven) 一个具体而微的Win32程序 程序进入点WinMain...
第1章 Win32程序基本概念 Win32程序开发流程 需要什么函数库(.LIB) 需要什么头文件(.H) 以消息为基础,以事件驱动之(message based,event driven) 一个具体而微的Win32程序 程序进入点WinMain 窗口类之注册与...
第1章 Win32程序基本概念 Win32程序开发流程 需要什么函数库(.LIB) 需要什么头文件(.H) 以消息为基础,以事件驱动之(message based,event driven) 一个具体而微的Win32程序 程序进入点WinMain 窗口类之注册与...
现在总算是入了点门,也收集了一些很好的资料,整理成一个CHM方便大家学习,时间仓促,整理得比较粗糙,大家凑合着看。这些文章均来自网络,版权归原作者所有。 1. 默认表达式类型是MASM. 2. 你能使用.expr ...
分裂視窗的程式概念/ 651 分裂視窗之實作/ 653 本章回顧/ 657 第12 章 印表與預覽/ 659 概觀/ 659 列印動作的背景原理/ 663 MFC 預設的印表機制/ 669 Scribble 列印機制的補強/ 685 印表機的頁和文件的頁/ 685 配置 ...
5.6.1 per_thread_buffers优化 198 5.6.2 global_buffers优化 200 5.6.3 query cache在不同环境下的使用 201 5.6.4 tuning-primer.sh性能调试工具的使用 205 5.6.5 72 gb内存的my.cnf配置文件 208 5.6.6 谨慎...
调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,...