基本概念
程序(Program)
程序
是为完成特定任务,使用某种语言编写的一组计算机能识别和执行的指令集合
。即一段静态的代码。
进程(Process)
进程
是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
进程具有的特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进行一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性:进程由程序
,数据
和进程控制块(PCB)
三部分组成
线程(Thread)
线程
是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元
,是处理器调度和分派的基本单位
。一个进程可以有一个或多个线程。
进程与线程的区别
线程是
CPU调度的最小单位
,而进程是操作系统分配资源的最小单位
;一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
进程之间相互独立
,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;调度和切换:线程上下文切换比进程上下文切换要快得多
并行(Parallelism)
多个CPU
同时执行
多个任务。例如:多个人同时做不同的事
并发(Concurrency)
一个CPU(利用
时间片
)交替执行
多个任务,因为一个时间片时间非常短,所以看起来像是”同时执行”。

Java中线程的状态
新创建状态 new
新创建了一个线程对象,但
还没有调用start()方法
。
运行状态 runnable
Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
阻塞状态 blocked
阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态。
等待状态 waiting
处于这种状态的线程不会被分配CPU执行时间,它们要
等待被显式地唤醒
(调用notify方法或notifyAll方法),否则会处于无限期等待的状态
。
超时等待状态 timed_waiting
处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在
达到一定时间后它们会自动唤醒
。
终止状态 terminated
表示该线程已经执行完毕。
当线程的run()方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。
线程状态转换图

创建线程的几种方式
实现Runnable
接口
1 | public class RunnableTest implements Runnable { |
继承Thread
类
1 | public class ThreadTest extends Thread{ |
实现Callable
接口
1 | public class MyCallable implements Callable<String> { |
线程池创建线程
1 | public class ThreadPoolDemo { |