Java多线程之基本概念

什么是进程(Process)

几乎所有OS都支持进程概念,进程是具有一定独立功能的程序,关于某个数据集合上的一次运行活动,是系统资源分配和调度的一个独立运行单位。

程序是静态的概念,进程是动态的概念。

程序是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体,当一个程序进入内存运行时,就变成进程进程是程序在某个数据集上的执行,是一个动态实体(进程本身不会运行,是线程的容器)

进程因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。

若干进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或不同步(平行)的方式独立运行。进程为现今分时系统的基本运作单位。

一个程序可能对应若干进程,可以是一个程序多次执行.
一个进程可以包含一个或多个线程。
一个进程至少要包含一个线程(一个线程必须有一个父进程)。

进程的三个特征

  • 独立性
    进程是系统中独立存在的实体,有自己独立的资源,私有的地址空间。无进程本身允许,一个用户进程不可以直接访问其他进程的地址空间

  • 动态性
    程序是静态指令集合,进程是正在系统中活动的指令集合。进程加入了时间概念,具有自己的生命周期和各个状态,程序没有。

  • 并发性
    多个进程可以在单个CPU上并发执行,多个进程间不会互相影响,切分时间片

什么是线程(Thread)

从资源调度角度看,我们知道程序执行的过程,伴随着许多次CPU资源、内存资源、硬盘资源、网络资源和其他I/O资源的分配调度。这些硬件资源需要操作系统管理调度,而操作系统能够进行运算调度的最小单位,就是线程。

从程序运行的角度看,一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程

线程本身不能运行,它只能用于程序中。

说明:

  • 线程是程序内的顺序执行流,只能使用分配给程序(进程)的资源和环境,可以有自己堆栈,程序计数器,和局部变量。
  • 由于多个线程共享父进程的全部资源,因此,需确保线程不会妨碍同一进程里的其他线程

并发性(concurrency)与并行性(parallel)

并行:同一时刻,有多条指令在多个处理器上同时执行(多核CPU)
并发:同一时刻,只有一个指令执行,但多个进程指令被快速轮换执行,使得宏观上具有多个进程同时执行的效果(切分时间片)

现代操作系统都支持多进程的并发,具体实现细节上可能因为硬件和操作系统的不同而采用不同的策略,常用:

  • 共用式的多任务操作策略

  • 抢占式多任务操作策略

多线程

多线程之于进程的理解,可以类比多进程之于操作系统。多线程指在单个程序中可以同时运行多个不同的线程执行不同的任务。

线程在程序中是独立、并发的执行流,与分隔的进程相比,进程中线程之间的间隔程度要小。它们共享内存、文件句柄其他每个进程应有的状态。

线程的划分尺度小于进程,使得多线程程序的并发性高。进程在执行过程中有独立的内存单元,多个线程共享这个内存,从而提高了程序的运行效率

线程比进程有更高的性能,

因为同一个进程中的线程有共性: 共享一个进程的虚拟空间,

共享的环境包括: 进程代码段,进程的公有数据等。利用这些共享的数据,线程很容易实现通信。

操作系统创建一个进程时,需要分配独立的内存,并分配大量相关的资源;但创建线程就简单地多,因此,使用多线程实现并发比多进程实现并发要性能高。

总结起来,多线程的优势:

  • 进程间不能共享内存,但线程间共享内存很容易。
  • 创建线程的代价比进程要小得多,使用多线程实现多任务并发效率高
  • Java内置多线程功能支持,不是单纯地作为底层OS的调度方式,简化了多线程编程

Java线程模型

  Java多线程的优点就在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序的其他部分。
  多线程允许活的循环在每一帧间隙中沉睡一秒而不暂停整个系统。

线程组

  所有线程都隶属于一个线程组。那可以是一个默认线程组,也可以是一个创建线程时明确指定的组。
 
  在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。
  若创建多个线程而不指定一个组,它们就会与创建它的线程属于同一个组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值