1.程序
程序是由一系列的指令和数据组成。但这些执行要运行,就必须要将指令加载至CPU,数据要加载至内存。在执行指令的时候还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。
2.进程
当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
进程可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360安全卫士等)
3.线程
一个线程就是一个指令流。将指令流中的一条条指令以一定的顺序交给CPU执行。
Java中,线程作为最小调度单位,进程作为资源分配的最小单位。在window中进程是不活动的,只是作为线程的容器。
JAVA中如何去创建线程?
这有三种方式创建线程
1.创建Thread类的子类,重写run方法
通过Thread类的子类对象调用start()方法,会做两件事,1是启动一个新线程,2是调用run方法。
2.实现Runnable接口
讲一讲为什么会出现实现Runnable接口的方式。就是因为如果一个子类需要继承其他的类,上面的方式就无法实现,所以引入Runnable接口的形式。
1.首先定义一个类实现Runnable接口。
2.创建当前类的对象
3.将此对象传递到Thread类的构造器中,创建Thread类的实例t1。
4.t1.start();
3.FutureTask配合Thread
FutureTask能够接收Callable类型的参数,用来处理有返回结果的情况。
小结:
方法1是将线程和任务合并在一起,方法2是把线程和任务分开了
1.用Runnable更容易与线程池等高级API配合
2.用Runable让任务类脱离了Thread继承体系,更灵活