大家好,我是吴99同学。
今天我一位朋友久66问我:作为一个程序员,你能解释一下什么是程序吗?
这。。。我一下子就懵了啊!作为一个人,你天天呼吸空气也不懂怎么定义空气啊!什么生物会问这种奇葩的问题a?(久66答:面试官)好吧,我基础不牢也不是什么众所周知的事了,该补补课看看什么是程序,还有(老是跟它形影不离的)进程和线程。看书是不可能看的,找了下北航康师傅的视频吸收一下大佬的精髓。
当然,以下内容主要是自己的理解(主观中带一丢丢客观),谨慎服用。
程序 vs 进程 vs 线程
写代码的目的最主要还是要完成某一个特定的任务,而为完成这个任务熬的无数夜晚写的代码指令集和,就是程序,指的是一些静态的代码。当它运行起来,我们就有了一个进程(动态)。如果进程被终止,那么这个进程也就没了,但程序还是存在的。
当程序运行起来,我们也就在往完成任务的方向一步步前进。但正如公司中为追求效率,术业有专攻,程序员就写代码,清洁人员就清洁,老板就?(不知道,没见过我们老板)。在程序里我们为了提高效率,也会将任务分配给不同的“人”来做,就是一个进程可以有多个不同的线程,它们是程序内部不同的执行路径。
单线程就像是自己开了个小卖部,什么事都需要亲历亲为。而多线程就像是在一个公司(进程)里,不同部门(线程)有着各自的小任务,服务于一个大的任务。我们每个java程序最少都有主线程(main)和垃圾回收线程(gc),在主线程办事不停造对象的时候,同时需要有一个背后的清洁阿姨默默帮它清理那些不用的对象。
在java中,线程与线程之间有共享的部分,也有独立的部分。比如,栈是各自一份的,就像每个人的工位。而堆和方法区是共享的,比如说厕所。(有兴趣的可以看看JVM相关知识)
* 以上为自己的理解。如有不当之处,还望各位大佬指正 :>



