一、提到多线程,就不得不理解以下几点:
1.程序,进程,线程这三者之间的关系?
简单来说,一程序可以调用多个进程,比如一个视频播放器程序,里面就存在两个进程:一个是播放视频的进程,一个是下载上传视频的进程。
一个进程又同时调用多个线程,这个线程是隐藏的,用进程管理器看不到,可用其它的进程管理软件来查看。
三者的逻辑关系是程序调用进程,进程调用线程,一般来说程序下面都是多进程,不同的进程分工不同;进程下面也基本上是多线程的。
可以这样下定义:进程是系统进行资源分配和调用的独立单位,每一个进程,都由它自己的内存空间和系统资源
线程是进程的执行单元,执行路径,线程也是程序使用CPU的最基本单位
2.单线程与多线程以及多线程的意义?
如果程序只有一条执行路径,这就是单线程;相反如果程序有多条路径,那么就是多线程
看下面这段程序:
public class Thread {
public static void main(String[]args) {
//code……….
…………
………..
}
}
这里面至少存在两条程序,一条是主线程main,另外一条就是垃圾回收线程,即JVM一遍”执行”main,”一边”也在执行垃圾回收机制
所以说java支持多线程,而多线程的意义它可以让程序在一个时间段执行多个事情,提高了应用程序的使用率;
比如上面那个例子,如果是单线程,那么JVM不得不执行一会main线程然后停下来去执行垃圾回收机制
3.理解并发与并行
思考:我们在一边玩游戏,一边带上耳机听歌,请问玩游戏与听歌是同时进行的吗?
显然不是,因为CPU在某一个时间点上只能做一件事,我们玩游戏,CPU就切换到执行游戏进程,听歌,CPU就切换到听歌进程;CPU就这样反复做这高效率的切换动作,这种切换是随机的,但是让我们人感觉到就是同时发生的,这就是并发的概念
并发:通过CPU调度算法,让用户看上去同时执行,实际上,是通过CPU在高速切换,并不是真正的额同时
并行:多个CPU实例或者多台机器同时执行一段处理逻辑,这就是真正的同时;
详情可以看看此篇:http://blog.csdn.net/dongmeng1994/article/details/54586466