线程简介:
现在个人计算机操作系统多采用多任务和分时设计。一般可以在 同一时间内执行多个程序的操作系统都有进程的概念。一个进程就是一个执行中的程序,而每一个进程都哟自己独立的一块内存空间、一组系统资源。在进程概念中,每一个进程的内部数据和状态都是完全独立的。Java程序通过流控制来执行程序流,程序中单个顺序流控制称为线程;多线程则是指单个程序中可以同时运行多个不同的线程,执行不同的任务。多线程意味着一个程序的多行语句几乎可以在同一时间内运行的。
线程与进程相似,是一段完成某个特定功能的代码,是程序中当个顺序的流控制。但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源的,线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,正因为如此,线程被称为轻负荷进程。一个进程中可以包含多个线程。
一个线程是一个程序内部的顺序控制流。
(1)、进程:每个进程都有自己的代码和数据空间(进程上下文),进程切换的开销大。
(2)、线程:轻量级进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,线程切换开销小。
(3)、多进程:在操作系统中,能同时运行多个任务程序;
(4)、多线程:在同一应用程序中,有多个顺序流同时执行;
线程的状态:
Java使用Thread类及其子类的对象表示线程,线程在它的一个完整的生命周期中通常要经历如下的四种状态:
1.创建状态
当一个Thread类或其子类的对象被声明并创建时,例如执行下列语句时,线程就处于创建状态:
Thread myThread=new MyThreadClass();
当一个线程处于创建状态的时候,它仅仅分配内存资源,并不能执行。
2.可运行状态
线程对象只有调用start()方法才能进入可运行状态;
myThread.start();
当处于可运行状态时,系统就为这个线程分配了它需要的系统资源,安排其运行并调用线程运行方法。
3.不可运行状态
不可运行状态也称阻塞状态,或者因为某种原因(输入/输出,等待消息,或者其他阻塞情况),系统不能执行线程状态。线程进入该状态的原因有如下几条。
(1)、调用了sleep方法 (2)、调用了suspend方法
(3)、为等候一个条件变量,线程调用wait方法
(4)、输入/输出流中发生了阻塞状态
4.死亡状态
就是线程释放了实体。处于死亡状态的线程不具有继续运行的能力。一般可以通过两种方法实现:
(1)、自然撤销,正常运行的线程完成它的全部工作,也就是线程执行完毕
(2)、线程被停止,调用stop方法。一般不推荐通过这种方法来终止线程的执行。
我们以前写的程序都是从上往下按照一定顺序执行的,而引入线程之后,这个苛刻的规则被打破,程序会开辟多个分支运行,再加上处理器的高速处理数据的能力,我们肉眼看起来就像是同时运行一样。