资讯专栏INFORMATION COLUMN

JAVA并发编程--1.基础概念

abson / 2923人阅读

摘要:线程线程,是程序执行流的最小单元。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程的状态机线程也有就绪阻塞和运行三种基本状态。在单个程序中同时运行多个线程完成不同的工作,称为多线程。可以视为不同线程竞争一把锁。

进程线程协程 进程

进程是一个实体。每一个进程都有它自己的地址空间,

文本区域(text region)

数据区域(data region)

堆栈(stack region)。

文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。

进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

线程

线程,是程序执行流的最小单元。一个标准的线程

线程ID,

当前指令指针(PC)

寄存器集合

堆栈

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个 进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程 在运行中呈现出间断性。

线程的状态机

线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

协程

协程coroutine和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度,实现用户态中的切换。因此被认为更轻量,开销更低。
协程同一时间只能有一个协程运行,golang的goroutine采用的线程的方式,可能存在并行。

选型 

进程、线程、协程的关系和区别:

进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。

线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。

协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。

CPU密集型应用
多核的环境下,多线程可以充分利用CPU

IO密集型应用
理论上协程或者NIO的处理方式较佳

线程使用 创建线程

JAVA有2种方式实现

继承java.lang.Thread类

实现java.lang.Runnable接口,并重写run方法

启动/暂停线程

thread.start()

thread.stop()

互斥

使用synchronized关键字声明的方法,会在线程间进行同步。可以视为不同线程竞争一把锁。当线程运行时加锁,结束运行或异常退出时释放

中断

调用thread.interrupt()方法让线程进入中断interrupted状态,可通过调用isInterrupted来确认是否进入中断状态

等待/唤醒

调用thread.wait()方法让线程进入等待状态,进入此状态的线程可被其他线程的notify()/notifyAll()方法唤醒继续执行下文,也可被interrupt()进入中断
如果执行wait时指定了时间。那么当计时器到达指定时间后,如果没有被notify唤醒,该线程也会被唤醒。

状态机图例

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73023.html

相关文章

  • 多线程编程完全指南

    摘要:在这个范围广大的并发技术领域当中多线程编程可以说是基础和核心,大多数抽象并发问题的构思与解决都是基于多线程模型来进行的。一般来说,多线程程序会面临三类问题正确性问题效率问题死锁问题。 多线程编程或者说范围更大的并发编程是一种非常复杂且容易出错的编程方式,但是我们为什么还要冒着风险艰辛地学习各种多线程编程技术、解决各种并发问题呢? 因为并发是整个分布式集群的基础,通过分布式集群不仅可以大...

    mengera88 评论0 收藏0
  • Java并发Java并发编程与高并发基础概念

    摘要:笔记来源并发编程与高并发解决方案并发基础综述多级缓存缓存一致性乱序执行优化内存模型规定抽象结构同步八种操作及规则并发的优势与风险并发与高并发基本概念基本概念并发同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换 笔记来源:【IMOOC】Java并发编程与高并发解决方案 并发基础 综述: CPU多级缓存:缓存一致性、乱序执行优化 Java内存模型:JM...

    stackfing 评论0 收藏0
  • java并发编程学习之基础概念

    摘要:线程和进程参考进程和线程的区别和联系线程线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。进程进程作为分配资源的基本单位。 线程和进程 参考进程和线程的区别和联系 线程:线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销...

    enali 评论0 收藏0
  • Java学习必备书籍推荐终极版!

    摘要:实战高并发程序设计推荐豆瓣评分书的质量没的说,推荐大家好好看一下。推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。 很早就想把JavaGuide的书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇...

    Steve_Wang_ 评论0 收藏0

发表评论

0条评论

abson

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<