认识线程
认识线程
线程是什么?
线程是程序执行的最小单元,依托于进程存在。
一个进程中可以包含多个线程,多线程也可以共享同一块内存空间和系统资源,因此线程之间的切换相比于进程之间的切换更加节省资源、更加轻量化。
线程的状态
NEW,新建状态:线程被创建出来,但尚未启动时的线程状态
RUNNABLE,就绪状态:表示线程可以运行的状态,它可能正在运行,或者是在排队等待操作系统分配 CPU 资源;
BLOCKED,阻塞等待锁的线程状态:表示处于阻塞状态的线程,正在等待锁释放,比如等待执行 synchronized 代码块或者使用 synchronized 标记的方法,但此时已经被其他线程执行,所以处于阻塞等待。
WAITING,等待状态:一个线程正在等待另一个线程执行某个特定的动作,这个线程就处于等待状态。比如一个线程调用了 Object.wait() ,那它在等待另一个线程调用 Object.notify() 或 Object.notifyAll() 方法时所处的状态,称之为等待状态。
TIMED_WAITING,超时等待状态:当进行等待状态时,会设置一个超时时间,当等待时长超过规定的时间后,线程所处的状态就称为超时等待状态。比如 Object.wait(long timeout) 和 Thread.join(long timeout) 等方法,就会让线程有可能进入此状态。
TERMINATED,终止状态:表示线程已经执行完成。
线程状态的枚举源代码:
线程的工作模式
首先创建线程,此时线程处于 NEW 状态。
指定线程需要执行的业务方法,此时线程处于 RUNNABLE 状态
线程执行过程中,如果遇到有同步代码块,并且其他线程先一步执行,则当前线程则会进入 BLOCKED 状态。待其他线程执行完成同步代码块之后,当前线程会继续等待。
如果线程中代码有调用 Object.wait()方法或者 Thread.join()方法时,线程会进入 WAITING 状态,并且当有设置超时时间时,则线程会进入 TIMED_WAITING 等待状态。直到有其他线程执行了 notify() 或 notifyAll() 方法,当前线程才会被唤醒,继续执行代码。
最后线程方法执行完成,线程也就变成了 TERMINATED 状态。
版权声明: 本文为 InfoQ 作者【zarmnosaj】的原创文章。
原文链接:【http://xie.infoq.cn/article/95ad3201b7107c668d6900f19】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论