前言:
多线程编程是java语言最为重要的特性之一,利用多线程技术可以提升单位时间的处理性能,也是现代程序开发中高并发的主要设计形式。
这里首先需要理解进程与线程的区别。
1、何为进程?
进程的定义:
进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。
看完之后,是不是感觉很抽象?很懵bi?懵bi就对了,说明你和我智商一样高…开个玩笑
不妨先憋弃上面的概念,放松一下大脑,双击打开LOL,秒选德马打野,输了直接退出游戏并且保持微笑,然后正襟危坐心平气和的看宜春写的博客…
电脑上安装的软件比如:LOL、微信、谷歌等等都是存储在硬盘上的,硬盘上的数据是永久存储(ORM)。
当我们双击LOL时,LOL程序执行就进入到了内存中,所有的程序只有进入到内存中才能执行。内存属于临时存储(RAM),而进入内存的程序都可以叫做是进程,把LOL程序退出的时候,LOL程序就会退出内存,进程也就随之销毁了!因此说各位撸了一把进程也不为过吧。
啥?字太多了,看的不够明了,不如看图得劲…额。。。
上面主要是通过抽象的描述了进程,其实进程是可以很直观的看的到的,按“ctrl+alt+delete”打开任务管理器,可以看到
其实,关于线程博主我完全可以一两句话概括,但是这样并不负责,毕竟这篇文章标题就是要让你彻底入门java多线程。如果连进程都理解不好谈何彻底理解多线程?
2、何为线程?
同样的,我们先来看线程的概念
线程是进程中的一个执行单位,负责当前进程中程序的执行。一个进程中至少有一个线程,也就是说一个进程可以有多个线程的,而多个线程的进程运用程序就叫做多线程程序
线程的概念稍微好理解很多,但是想更深层次的去理解光靠上面一段文字的概述是完全不够的!
这不打LOL的过程中,属实卡的一批,果然花高价998买的6手戴尔笔记本打LOL属实像极了爱情。这个时候不得不双击打开电脑安全管家进行杀毒,果然2500天没有进行过病毒查杀,我天。。。其实我相信很多人都用过电脑管家或者手机管家之类的安全软件,我们都很清楚我们开启病毒查杀之后一般要几分钟扫描查杀,这个时候我们是可以让它后台进行的,我们不会等而是开启另一个垃圾清理的功能,这个时候我们也不会等而是再去启动电脑加速功能。等到 这些操作都完成之后果断退出电脑管家,继续LOL,果然高价998买的6手戴尔笔记本再怎么杀毒打LOL还是照样的卡…
其实清楚线程必然涉及到CPU的相关概念了,将上面文字所描述的用图片概括,大致为:
1.3、何为多线程?
从上一节中,我们也提到过多线程,所以理解起来应该不难。
多线程就是多个线程同时运行 或 交替运行。
单核CPU:交替运行。
多核CPU:同时运行。
其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。
1.4、何为线程调度优先级?
说起线程调度优先级这个概念,就让我想到现在我们大部分人投简历一样。如果你的学历或者工作经验越高,那么你的优先级就越高,面试官很大几率就会让你去面试但也不是一定只是几率特别大,如果线程的优先级相同,那么会随机选择一个(线程随机性)!在我们每个人的电脑中线程是可以设置线程的优先级的,但是生活中没有优先级(学历、工作经验)的孩子就只能靠自己的能力了
线程优先级具有继承特性比如A线程启动B线程,则B线程的优先级和A是一样的。
线程优先级具有随机性也就是说线程优先级高的不一定每一次都先执行完,只是被执行的可能性更大。
在今后的多线程学习旅游中我们会使用到getPriority()方法获取线程的优先级。
1.5、为什么提倡使用多线程而不是多进程?
线程与进程相似,但线程是一个比进程更小的执行单位,是程序执行的最小单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。同时线程是程序执行的最小单位。
使用多线程而不是用多进程去进行并发程序的设计,是因为线程间的切换和调度的成本远远小于进程。
而使用多线程,多线程会将程序运行方式从串行运行变为并发运行,效率会有很大提高。