对于一个程序,我们可能会要求其同时执行多个操作。比如说我们可以使用视频软件在播放视频的同时查找其他的视频,此时便可以认为我们是在同时执行播放视频和查找其他视频两个任务。为了实现同时进行多个任务的要求,我们引入了多线程的方式。
如果我们把程序比作一个学校,这个学校有多个任务,如教学、保证学生安全、提供基本的硬件设施等,那么学校里面的老师教书、门卫进行人员进出管控和物业完善相应设施等就相当于一个个线程,每个线程可以独立的进行自己的活动、每个线程之间也可以进行相互合作和沟通来共同使用和维护同一份共享资源。
以下给出相关术语的具体定义和解释。
程序:人们为了完成一定任务用特定的语言编写的一组指令的集合。(任务就是我们这个程序要干什么、特定语言就是我们编写程序用的语言、指令的集合就是我们的代码。也就是说程序就是我们所写的代码。)
进程:程序的一次执行过程。或者说正在运行的程序就是线程。
线程:程序的一条执行路径。(可以理解成线程是进程的进程。)
并行:多个CPU同时执行多个任务。
并发:单个凑“同时”执行多个任务。(这里之所以打双引号是因为这里的同时是假的同时,CPU在多个任务之间来回快速的切换,使我们有一种同时的感觉。)
接下来给出多项程的优点:
1.提高CPU的利用率。(在多核处理器中,我们把多个任务通过并行的方式执行,可以让多个任务同时分配CPU资源,不至于出现一个线程占着CPU却不使用的情况,进而提高CPU的利用率。)
2.改善程序结构。
在Java中,多线程有如下特点:
1.一个Java程序最少会有三个线程:main线程、垃圾回收线程、异常处理线程。
2.每个线程都有一份独立的程序计数器和虚拟机栈,方法区和堆是多个线程共用的。
注意:对于单核CPU来说,使用单线程先后完成多个任务花的时间肯定比多线程执行多个任务花的时间少(因为CPU在切换任务时需要花费时间)。