Java 线程基础概念

174 阅读3分钟

这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

程序、进程、线程

一图胜千言,大家可以先看一下我特意截的活动监视器「MAC 版」: image.png

  • Process ID,进程ID,目测是唯一标识的;
  • Process Name 进程名字,有一些是我的软件,比如:WeChat、idea,有一些则是后台的程序,如 trustd、bluetoothd;
  • User Name 有的是我开启的,就是 fang,后台开启的,就是 root;
  • Threads 这里可以看到每一条进程,可以对应多个线程。

程序只占硬盘的存储空间,不占资源。成为进程被执行后才开始消耗资源。

程序:

Program,很多年前在课堂上记住的: 程序 = 算法 + 数据结构。算法就是解决问题的办法,数据结构是数据与数据直接是以何种关系而存在的。

比较狭义的概念,并不是说我们以为的软件:谷歌浏览器这种的。而是说一些编译好等待执行的那些代码文件。我们用键盘敲好代码,然后要交给操作系统去执行。

程序是一个被动实体,因为它驻留在辅助存储器中,例如存储在磁盘上的文件的内容。一个程序可以有几个进程。(www.geeksforgeeks.org/difference-… 把程序放在这里,主要是为了说明,一个程序可以包括多个进程。

进程:

进程具有 self-contained (独立的、自给自足的)的执行环境。一个进程通常具有完整的私有基本运行时间资源。特别是,每个进程都有自己的存储空间。

但是 Java 应用程序可以使用 ProcessBuilder 对象创建其他进程。进程之间的切换,对资源的消耗要比线程大。一般我们练习写的 Java 程序,都只有一个,main 入口,所以也就只有一个进程。

线程:

在并发处理中,更多考虑多线程。线程有时被称为是 lightweight processes(轻量级的进程)。 两个进程和线程都提供了执行环境,但创建新线程需要更少的资源,而不是创建新进程。

每个进程至少有一个线程。线程共享进程的资源,包括内存和打开文件。多线程执行是 Java 平台的重要特征。

🔗参考链接: docs.oracle.com/javase/tuto…

「不知道为什么,脑海里有一个不知道是否合适的比喻。葫芦娃葫芦娃,一根藤上七个瓜。七个葫芦娃可以合体成一个超级葫芦娃。这个超级葫芦娃就像“进程”,分开后的七兄弟就像“线程”。进程是个整体,线程做什么事更灵活。他们的目标也都一致,就是打死蛇精。😂」

并发

并发就是一起发生。即使是最简单的程序、单核操作系统,也可以发生并发的情况。并发的话,有点像数据库的读取控制那里。有人读有人写,你怎么保证大家没有幻读?怎么保证同时有人写的话,同一个人名对应了不同的数据?

这是我没学之前联想到的。

学了以后发现,是从线程执行的角度来看的: 对于同一份资源进行操作,资源被抢夺了,那么假如火车票只有 100 张,两个人(线程)同时抢,怎么保证最后抢的是可靠的、合规的(不为负、不重复)。

这里也只是简单提一下这个概念。并发的处理,下期再见❤ 感恩节快乐 ~