万丈高楼平地起 -- 并发基础(一)

2024-02-11 14:50

本文主要是介绍万丈高楼平地起 -- 并发基础(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一:进程与线程
1.1 概念辨析

现代操作系统运行程序时就会创建一个进程,系统调用的最小操作单元就是线程,一个进程多以拥有多根线程。例如QQ音乐就是一个进程,进程中的播放、下载、收藏等操作都需要线程去完成

1.2 多线程意义

多线程等于快是多数人误区,多线程上下文切换以及线程创建销毁都需要资源消耗。使用多线程体现出快在多核处理器中就是将线程分配到不同CPU从而减少CPU闲置时间。单个CPU的某个时间节点只能运行一根线程,针对单核处理器的情况可以考虑在密集I/O的情况下使用多线程

二:线程状态

线程状态
线程状态图

Thread内部枚举类State定义线程状态对象,具体含义如下所示:

状态名称状态值
NEW新建,线程类通过new关键字刚实例化时的状态
RUNNABLE可执行,线程调用start()后等待CPU资源的状态
BLOCKED阻塞,等待线程锁
WAITING阻塞,等待特定方法执行如notify()
TIMED_WAITING阻塞,如sleep()后等待时间到达
TERMINATED终止、销毁
三:线程优先级

线程优先级
线程优先级Thread类中提供属性priority及其相关方法get/set设定,同时提供三个常量表示优先级等级。注意以下几点:

  1. Java中线程优先级是伪优先级,不能决定线程执行顺序
  2. 线程优先级范围为1-10,默认线程优先级为5
  3. 子线程优先级与父线程默认保持一致
四:守护线程

守护线程

  1. Thread中使用属性Daemon标记守护线程,线程启动前使用set方法设置
  2. 子线程是否为守护线程与父线程保持一致
  3. 当所有非守护线程结束后守护线程立即终止退出,这里考虑下finally执行
五:线程阻塞
5.1 sleep

sleep

  1. 线程状态从RUNNING改变到TIMED_WAITING,陷入等待沉睡
  2. 该阻塞状态下线程不会释放CPU以及锁资源
  3. 该方法是中断敏感异常方法
5.2 wait

wait

  1. 线程状态由RUNNING改变为WAITING,等待特定唤醒
  2. 执行该方法线程必须拥有对象监视器,通俗点就是
  3. 执行该方法线程释放锁资源,notify/notifyAll唤醒后重新争取CPU资源
  4. 默认无参执行wait(0)无限制等待,重载可以限定等待时长
  5. 切记一点该方法不是线程实例调用,Object提供方法,释放线程为当前线程
5.3 yield

yield
Object提供,向调度程序提示恐龙让梨,我愿意退后一步放弃当前使用的处理器。但是调度程序可能会尊老爱幼,忽略它的申请。也就是不确定性

六:线程中断
6.1 中断标记

中断标记
看清楚interrupt0()方法后注释,仅仅只是整个标记,该方法不影响线程运行。但是遇到中断检查可以抛出中断异常InterruptedException,例如sleep()

6.2 检查中断

祛除标记
不祛除标记
两个检查中断标记的方法都调用本地方法isInterrupted实现,但是注意咯:

interrupted()参数传递true,isInterrupted()参数传递false,代表是否祛除中断标记

中断检查

七:线程串行

串行执行

  1. 线程A中执行线程B.join()表示先让B线程执行后再执行A
  2. join()参数可限制执行时长,超时未执行完则需要竞争CPU资源

这篇关于万丈高楼平地起 -- 并发基础(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700073

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2