基本概念
- 进程 (Process):一个程序运行起来时在内存中开辟一段空间用来运行程序,这段空间包括 heap、stack、data segment 和 code segment。例如,开一个 QQ 就表明开了一个 QQ 进程。
- 线程 (Thread):每一个进程中都至少有一个线程。线程是指程序中代码运行时的运行路径,一个线程表示一条路径。例如 QQ 进程中,发送消息、接收消息、接收文件、发送文件等各种独立的功能都需要一个线程来执行。
- 进程和线程的区别:
- 从资源的角度来考虑,进程主要考虑的是 CPU 和内存,而线程主要考虑的是 CPU 的调度,某进程中的各线程之间可以共享这个进程的很多资源。
- 从粒度粗细来考虑,进程的粒度较粗,进程上下文切换时消耗的 CPU 资源较多。线程的粒度要小的多,虽然线程也会切换,但因为共享进程的上下文,相比进程上下文切换而言,同进程内的线程切换时消耗的资源要小的多的多。
- 在 JAVA 中,除了 java 运行时启动的 JVM 是一个进程,其他所有任务都以线程的方式执行,也就是说 java 应用程序是单进程的,甚至可以说没有进程的概念。
- 线程组 (ThreadGroup):线程组提供了一些批量管理线程的方法,因此通过将线程加入到线程组中,可以更方便地管理这些线程。