java线程和进程

 基本概念

  Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。

  对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。

  进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。

  线程是指进程中的一个执行流程,一个进程可以运行多个线程。线程基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)。

  Java中线程是指java.lang.Thread类的一个实例或线程的执行。使用java.lang.Thread或java.lang.Runnable接口编写代码定义、实例化、启动新线程。

  Java中每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行。main()方法运行在一个线程内,称为主线程。一旦创建一个新的线程,就产生一个新的调用栈。

  线程分为两类:用户线程和守候线程。当所有用户线程执行完毕后,JVM自动关闭。但是守候线程却不独立与JVM,守候线程一般是有操作系统或用户自己创建的。

线程和进程的区别:

(1)进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元

(2)同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。

  进程 线程
定义 进程是程序运行的一个实体的运行过程,是系统进行资源分配和调度的一个基本单位 线程是进程运行和执行的最小调度单位
活泼性 不活泼 活泼,随时可以创建和销毁
系统开销 创建、撤销、切换开销大,资源要重新非配和收回 相对于进程仅保存少量寄存器内容,开销小在进程的地址空间执行代码
拥有资产 资源拥有的基本单位 相对于进程来说基本上不拥有资源,但会占用CPU
地址空间 系统赋予的独立的内存地址空间 线程只由相关堆栈寄存器和线程控制表TCB组成,寄存器可被用来存储线程内的局部变量
调度 仅是资源分配的基本单位 独立调度,分派的基本单位
安全性 相对独立,彼此不会相互影响 线程共享同一进程下面的资源可以相互通信,相互影响

 

你可能感兴趣的:(java线程和进程)