1.什么是进程?
进程是系统中正在运行的一个程序,程序一旦运行就是进程。
进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。
2.什么是线程?
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
3.线程的实现方式?
1.继承Thread类
2.实现Runnable接口
3.使用Callable和Future
4.Thread 类中的start() 和 run() 方法有什么区别?
1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。
2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码;程序中只有主线程------这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。
5.线程NEW状态
new创建一个Thread对象时,并没处于执行状态,因为没有调用start方法启动改线程,那么此时的状态就是新建状态。
6.线程RUNNABLE状态
线程对象通过start方法进入runnable状态,启动的线程不一定会立即得到执行,线程的运行与否要看cpu的调度,我们把这个中间状态叫可执行状态(RUNNABLE)。
7.线程的RUNNING状态
一旦cpu通过轮询货其他方式从任务可以执行队列中选中了线程,此时它才能真正的执行自己的逻辑代码。
8.线程的BLOCKED状态
线程正在等待获取锁。
进入BLOCKED状态,比如调用了sleep,或者wait方法
进行某个阻塞的io操作,比如因网络数据的读写进入BLOCKED状态
获取某个锁资源,从而加入到该锁的阻塞队列中而进入BLOCKED状态
9.线程的TERMINATED状态
TERMINATED是一个线程的最终状态,在该状态下线程不会再切换到其他任何状态了,代表整个生命周期都结束了。
下面几种情况会进入TERMINATED状态:
线程运行正常结束,结束生命周期
线程运行出错意外结束
JVM Crash 导致所有的线程都结束
10.后记
更多多线程资料详见 shimo.im/docs/2E7V3AjOJNwiYsWE/ 。