基本概念
程序:一段静态的代码,它是应用软件执行的蓝本。
进程:是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。
每一个进程执行都有一个执行单元。该顺序是一个执行路径,或者叫一个控制单元。
线程:就是进程中的一个独立的控制单元。
线程控制着进程的执行,线程间可以共享相同的内存单元。
Java的多线程就是在操作系统每次分时给Java程序一个时间片的CPU时间内,在若干个独立的可控制的线程之间进行切换。
每个Java程序都有一个默认的主线程。Java应用程序总是从主类的main方法开始执行。当jvm加载代码,发现main方法之后,会启动一个线程,这个线程称为主线程。
状态与生命周期
新建的线程在它的一个完整的生命周期中通常经历以下4种状态:
1.新建
当一个Thread类或其子类的对象被声明并创建时,新的线程对象处于新建状态。此时它已经有了相应的内存空间和其他资源。
2.运行
线程创建后仅仅是占有了内存资源,在JVM管理的线程中还没有此线程,必须调用start()方法通知JVM,这样JVM就知道又有一个新线程排队等候切换了。
3.中断
中断的原因:
1>JVM将CPU资源从当前线程切换给其他线程,是本线程让出CPU的使用权处于中断状态。
2>线程使用CPU资源期间,执行了sleep(int millsecond)方法,是当前线程进入睡眠状态。
经过参数millsecond指定的毫秒数之后,该线程会重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。
3>线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。等待状态的线程不会主动进到线程队列中排队等待CPU资源,必须由其他线程调用notify()方法通知它,使得它重新进到线程队列中排队等待CPU资源。
4>线程使用CPU资源期间,执行某些操作进入阻塞状态,比如执行读/写操作引起阻塞。进入阻塞状态时线程不能进入排队队列,只有当引起阻塞的原因消除时,线程才重新进到线程队列中排队等待CPU资源。
4.死亡
死亡状态:线程释放了实体,即释放分配给线程对象的内存。
处于死亡状态的线程不具有继续运行的能力。
线程死亡原因:
1>正常运行的线程完成了它的所有工作,即执行网run()方法中的所有语句,结束了run()方法
2>线程被提前强制性地终止,即强制run()方法结束