Java J.U.C并发包(1)—— J.U.C并发包综述

J.U.C包类图

Java J.U.C并发包(1)—— J.U.C并发包综述_第1张图片
图片来源:http://www.blogjava.net/xylz/archive/2010/06/30/324915.html

Java多线程相关类的实现都在Java的并发包中,该包的位置是:jdk8\java\util\concurrent。该包主要包含如下五大部分:

  • (1) atomic包:主要提供原子变量类相关功能,是构建非阻塞算法的基础
  • (2) Locks:提供显示锁相关功能,包括互斥锁和速写锁
  • (3) tools:提供同步工具类,如信号量,闭锁,栅栏等功能
  • (4) Coolection:提供并发容器相关功能
  • (5) executor:提供线程池的相关功能

下面讲解并发中的一些基本概念:进程调度、进程、线程、多进程、多线程、并发和并行等

进程调度

大部分操作系统的任务调度都是采用时间片轮转的抢占式调度方式,即一个任务执行一小段时间后会强制暂停去执行下一个任务,每个人物可以轮流执行。执行的一小段时间叫时间片,任务正在执行的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务被,暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能被执行,由于CPU的执行效率很高,每个任务的时间片很短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,也就是我们所说的并发,因此并发并不是真正的在同一个时间点多个任务一起执行。

Java J.U.C并发包(1)—— J.U.C并发包综述_第2张图片

进程

进程的概念

CPU是计算机的核心,它承担所有的计算任务;操作系统负责任务的调度、资源分配和管理,管理整个计算机硬件;应用程序是具有某种功能的程序,程序是运行在操作系统之上的

进程是资源分配的基本单元,一个进程有多个线程。进程由三部分组成:程序、数据集合和进程控制块组成

  • 程序:用于描述进程要完成的功能,是控制进程执行的指令集
  • 数据集合:程序在执行时所需要的数据和工作去
  • 程序控制块(Program Control Block,简称PCB):包含进程的描述信息和控制信息,是进程存在的唯一标识

进程的特征

  • 进程的基本特性:
    • 动态性:动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程有一定的生命期;而程序只是一组有序指令的集合,是静态实体
    • 并发性:引入进程的目的正是为了使其程序能和其它建立了进程的程序并发执行,而程序本身是不能并发执行的
  • 进程的结构性
    • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
    • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

进程的生命周期

在操作系统中,进程由物种状态:创建、就绪、运行、阻塞(等待)、退出

Java J.U.C并发包(1)—— J.U.C并发包综述_第3张图片

进程在运行过程有三种状态:就绪、运行、阻塞,创建和退出状态描述的是进程的创建过程和退出过程。

  • 创建:进程正在创建,还不能运行。操作系统在创建进程时要进行的工作包括分配和建立进程控制块表项、建立资源表格并分配资源、加载程序并建立地址空间;
  • 就绪:时间片已用完,此线程被强制暂停,等待下一个属于他的时间片到来;
  • 运行:此线程正在执行,正在占用时间片;
  • 阻塞:也叫等待状态,等待某一事件(如IO或另一个线程)执行完;

线程

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成

线程的生命周期

Java J.U.C并发包(1)—— J.U.C并发包综述_第4张图片

线程与进程的区别

  • (1)线程与资源分配无关,它属于某个进程,并与进程内的其它线程一起共享进程资源
  • (2)每个进程都有自己一套独立的资源(数据),供其内的所有线程共享
  • (3)一个进程内的线程通信比进程之间的通信更快速,有效(因为共享内存)

下面引用知乎的一个对线程的进程区别的理解:

作者:zhonyong
链接:https://www.zhihu.com/question/25532384/answer/81152571
来源:知乎

背景: CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情

一个最最基础的事实:CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来就是轮流着来。

多线程和多进程

多线程:同一时刻执行多个线程。用浏览器一边听歌,一边看剧,一边玩游戏
多进程:同时执行多个程序。同时运行QQ,微信,网页

并发Concurrent

当由多个线程在操作时,若系统中只有一个CPU,则它根本不可能真正同时进行一个及以上的线程。它只是把CPU运行时间划分为若干个时间段,再再时间段分配给各个线程执行,再一个时间段的线程代码运行时,其它线程处于挂起状态

并行Parallel

当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行

参考博文

http://www.blogjava.net/xylz/archive/2010/06/30/324915.html

你可能感兴趣的:(J.U.C源码)