并发编程艺术-4
本文主要介绍的Java 并发编程的基础知识, 其中包括了:线程是什么? 为什么需要多线程? 线程的状态和相关操作。
什么是线程:操作系统在运行程序时,会为其创建出一个进程,现代操作系统最小的调度单位是线程,每一个线程都有自己的堆栈,程序计数器,局部变量,可以访问共享内存。
为什么要使用多线程 :
(1) 多处理器
(2) 更快的响应时间
(3) 更好的编程模型
线程的状态 :
New: 创建线程,为其分配空间,等待CPU 分配时间片运行,这时候不一定加载到内存中,有可能被溢出到磁盘上面,还没调用 start.
Runnable:得到CPU时间片,开始运行
Sleep:释放CPU使用权,一段时间后继续运行,不释放锁
Wait:释放CPU使用权,需要notify/notifyall 唤醒,不然一直处于等待状态
Sleep(time) :释放CPU使用权,一段时间后继续运行,不释放锁
Wait(time), 会释放锁,进入等待。
Blocked:没有获得锁,阻塞.
Terminal:run 方法结束。
中断:是线程的一个标识位属性,就好像是其他线程通过调用interrupt() 进行告知线程消息,而线程通过检测自身的中断标识位来判断是否有线程中断自己,Thread 类里面的很多方法通过抛出interruptException,清除中断标识位。
-
@throws InterruptedException
-
if any thread has interrupted the current thread. The
-
<i>interrupted status</i> of the current thread is
-
cleared when this exception is thrown.
*/
这边有个tip : 每一个线程的结束的时候都会调用自身的notifyAll, 这个在JDK 源码中实现了。