多线程
线程,程序,进程
进程
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。
一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程占用某些系统资源,比如:CPU时间,内存空间,文件,输入输出设备地使用权等。
当程序在执行时,将会被操作系统载入内存中。线程是进程划分成地更小地运行单位。
线程和进程地最大不同是:进程是独立地,线程不一定,因为同一进程中地线程极有可能会相互影响。从另一角度说,进程属于操作系统地范畴,同一时间内,可以同时执行一个以上地程序,而线程是在同一程序内几乎同时执行一个以上地程序段。
程序
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也可以说程序是静态的代码。
线程
线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。同类的多个线程共享同一块内存空间和一组系统资源,系统在产生一个线程,或者是在各个线程之间切换工作时,负担比进程小的多,也被称为轻量级进程。
线程的基本状态
线程在运行的生命周期中的指定时刻处于以下六种不同状态中的一个:
- 初始状态
线程被构建,但是没有调用start()方法 - 运行状态
Java线程将操作系统中的就绪和运行两种状态笼统称作“运行中” - 阻塞状态
表示线程阻塞于锁 - 等待状态
表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出特定通知或中断 - 超时等待状态
该状态可以在指定时间自行返回 - 终止状态
表示当前线程已经执行完成
线程在生命周期中不是固定在某一个状态,而实随着代码的执行在不同状态之间切换。
线程创建之后处于NEW(新建)状态,调用start()方法后开始运行,线程这时处于READY(可运行)状态。可运行状态的线程获得了CPU时间片后处于RUNNING(运行)状态。【操作系统隐藏JVM中的可运行和运行两个状态,只能看到运行中状态,一般将这两个状态统称为运行中状态】
当线程执行wait()方法后,线程进入等待状态,进入等待状态的线程需要依靠其他线程的通知才能返回运行状态,而超时等待状态相当于在等待状态的基础上增加了超时限制,当超时时间到达后Java线程会返回运行中状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到阻塞状态。线程在执行Runnable的run()方法后将会进入到终止状态。