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

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

相关文章

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co