在Java语言之中最大的特点是支持多线程的开发(也是为数不多支持多线程的编程语言),所以在整个Java技术的学习里面,如果不能够对多线程的概念有一个全面并且细致的了解,则在日后进行一些项目设计的过程之中尤其是并发访问设计的过程之中就会出现严重的技术缺陷。
如果想要理解线程,首先就需要了解一下进程的概念,在传统的DOS系统的时代,其本身有一个特征:如果你的电脑上出现了病毒,那么多有的程序将无法执行,因为传统的DOS采用的是单进程处理,而单进程处理的最大特点:在同一个时间段上只允许一个程序在执行。
那么后来到了Windows的时代就开启了多进程的设计,于是就表示在同一个时间段上可以同时运行多个程序,并且这些程序将进行资源的轮流抢占。所以在同一个时间段上会有多个程序依次执行,但是在同一个时间点上只会有一个进程执行,而后来到了多核的CPU,由于可以处理的CPU多了,那么即便有再多的进程出现,也可以比单核CPU处理的速度有所提升。
线程是在进程基础之上划分的更小的程序单元,线程是在进程基础上创建并且使用的,所以线程依赖于进程的支持,但是线程的启动速度要比进程块许多,所以当使用多线程进行并发处理的时候,其执行的性能要高于进程。
Java是多线程的编程语言,所以Java在进行并发访问处理的时候可以得到更高的处理性能。
下面是面试常被问到的一些概念!!!
什么是进程?什么是线程?
进程:进程是并发执行程序在执行过程中资源分配和管理的基本单位(资源分配的最小单位)。进程可以理解为一个应用程序的执行过程,应用程序一旦执行,就是一个进程。每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。
进程:程序执行的最小单位。
为什么要有线程?
每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大响应用户请求效率低),因此操作系统中线程概念被引进。
进程与线程的区别?
- 地址空间: 同一进程的所有线程共享本进程的地址空间,而不同的进程之间的地址空间是独立的。
- 资源拥有: 同一进程的所有线程共享本进程的资源,如内存,CPU,IO等。进程之间的资源是独立的,无法共享。
- 执行过程:每一个进程可以说就是一个可执行的应用程序,每一个独立的进程都有一个程序执行的入口,顺序执行序列。但是线程不能够独立执行,必须依存在应用程序中,由程序的多线程控制机制进行控制。
- 健壮性: 因为同一进程的所以线程共享此线程的资源,因此当一个线程发生崩溃时,此进程也会发生崩溃。 但是各个进程之间的资源是独立的,因此当一个进程崩溃时,不会影响其他进程。因此进程比线程健壮。
- 开销:线程执行开销小,但不利于资源的管理与保护。
进程的执行开销大,但可以进行资源的管理与保护。进程可以跨机器前移。
进程与线程的选择取决条件?
因为进程是资源分配的基本单位,线程是程序执行的最小单。以及进程与线程之间的健壮性来考虑。
1. 在程序中,如果需要频繁创建和销毁的使用线程。因为进程创建和销毁开销很大(需要不停的分配资源),但是线程频繁的调用只是改变CPU的执行,开销小。
2. 如果需要程序更加的稳定安全时,可以选择进程。如果追求速度,就选择线程。