JUC结构

news2024/9/8 9:51:46

JUC是java.util.concurrent包的简称

在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题!

进程与线程的区别:

进程 : 一个运行中的程序的集合; 一个进程往往可以包含多个线程,至少包含一个线程

java默认有几个线程? 两个 main线程 gc线程

线程 : 线程(thread)是操作系统能够进行运算调度的最小单位。

并发与并行的区别:

并发(多线程操作同一个资源,交替执行)

CPU一核, 模拟出来多条线程,天下武功,唯快不破,快速交替

并行(多个人一起行走, 同时进行)

CPU多核,多个线程同时进行 ; 使用线程池操作

JUC的结构

1、tools(工具类):又叫信号量三组工具类,包含有

1)CountDownLatch(闭锁) 是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待

2)CyclicBarrier(栅栏) 之所以叫barrier,是因为是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 ,并且在释放等待线程后可以重用。

3)Semaphore(信号量) 是一个计数信号量,它的本质是一个“共享锁“。信号量维护了一个信号量许可集。线程可以通过调用 acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。

2、executor(执行者):是Java里面线程池的顶级接口,但它只是一个执行线程的工具,真正的线程池接口是ExecutorService,里面包含的类有:

1)ScheduledExecutorService 解决那些需要任务重复执行的问题

2)ScheduledThreadPoolExecutor 周期性任务调度的类实现

3、atomic(原子性包):是JDK提供的一组原子操作类,

包含有AtomicBoolean、AtomicInteger、AtomicIntegerArray等原子变量类,他们的实现原理大多是持有它们各自的对应的类型变量value,而且被volatile关键字修饰了。这样来保证每次一个线程要使用它都会拿到最新的值。

4、locks(锁包):是JDK提供的锁机制,相比synchronized关键字来进行同步锁,功能更加强大,它为锁提供了一个框架,该框架允许更灵活地使用锁包含的实现类有:

1)ReentrantLock 它是独占锁,是指只能被独自占领,即同一个时间点只能被一个线程锁获取到的锁。

2)ReentrantReadWriteLock 它包括子类ReadLock和WriteLock。ReadLock是共享锁,而WriteLock是独占锁。

3)LockSupport 它具备阻塞线程和解除阻塞线程的功能,并且不会引发死锁。

5、collections(集合类):主要是提供线程安全的集合, 比如:

1)ArrayList对应的高并发类是CopyOnWriteArrayList,

2)HashSet对应的高并发类是 CopyOnWriteArraySet,

3)HashMap对应的高并发类是ConcurrentHashMap等等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

count、sum、avg、max、min函数MySQL数据库 - 使用聚合函数查询(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴,并无盈利目的,尊重版权,如有侵犯,请官方工作人员联系博主谢谢。 目录 第1关:COUNT( )函数 任务描述 相关知识 COUNT()函数基本使用 编程要求 第2关:SUM(…

3.Java运算符

Java运算符 运算符基本分为六类:算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、三元(条件)运算符。 一、算术运算符 算数运算符,是指在Java运算中,计算数值类型的计算符号,既然是操作数值…

ubuntu下安装与配置samba

参考文章: https://blog.csdn.net/xurongxin2006/article/details/127740629 https://blog.csdn.net/weixin_42758707/article/details/129855529 https://www.linuxidc.com/Linux/2018-11/155466.htm https://blog.csdn.net/flyingcys/article/details/50673167 1、…

SGD,Adam,AdamW,LAMB优化器

一. SGD,Adam,AdamW,LAMB优化器 优化器是用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而最小化(或最大化)损失函数。 1. SGD 随机梯度下降是最简单的优化器,它采用了简单的…

Qt音视频开发37-识别鼠标按下像素坐标

一、前言 在和视频交互过程中,用户一般需要在显示视频的通道上点击对应的区域,弹出对应的操作按钮,将当前点击的区域或者绘制的多边形区域坐标或者坐标点集合,发送出去,通知其他设备进行处理。比如识别到很多人脸&…

使用 gzip 压缩数据

gzip 是GNU/Linux平台下常用的压缩软件,处理后缀名.gz的文件。 gzip 、 gunzip 和 zcat 都可以处理这种格式的。但这些工具只能压缩/解压缩单个文件或数据流,无法直接归档目录和多个文件。但是, gzip 可以同tar 和 cpio 这类归档工具配合使用…

JavaWeb——网络的基本概念

目录 一、IP地址 1、定义 2、格式 (1)、A类地址 (2)、B类地址 (3)、C类地址 (4)、特殊地址 二、端口号 三、协议 四、协议分层 1、定义 2、分类 (1&#xf…

pytorch进阶学习(六):如何对训练好的模型进行优化、验证并且对训练过程进行准确率、损失值等的可视化,新手友好超详细记录

课程资源: 7、模型验证与训练过程可视化【小学生都会的Pytorch】【提供源码】_哔哩哔哩_bilibili 推荐与上一节笔记搭配食用~: pytorch进阶学习(五):神经网络迁移学习应用的保姆级详细介绍,如何将训练好…

给boss直聘的搜索结果加上hr活跃状态,少看点半年活跃的岗位,有书签版,油猴版

背景:这段时间找工作,无奈大环境不好,所在城市大部分公司都投了。就是没几个回复的,要么送达,要么已读不回,要么拿了简历没见邀约。然后boss为了争取我们多浏览网站,把一些陈年老醋也拿上台面&a…

企业云盘如何实现文件共享?

企业文件共享的方式有很多,最常见的就是使用第三方企业云盘工具进行文件实时共享,这种方法不仅方便安全,而且兼容性高。 企业云盘主要是通过建立企业内部共享文件夹进行文件分享,支持通过权限管控来保障文件的安全,管理…

SonarQube踩坑:本地利用maven进行代码SonarQube静态扫描

1、ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count SonarQube内置ElasticSearch内存不够 - 解决办法:修改内存配置大小 - 查询当前配置内存:sysctl -a | grep vm.max_map_count - 更改内存大小:sysctl …

SpringBoot集成Camunda流程引擎 (一)

一、匹配版本简介 首先官网camunda7.17对应的springboot版本。camunda官网 camunda中文手册:Camunda 中文站 | docs.camunda.org 使用camunda流程引擎、web界面、Rest服务接口相应依赖如下: 流程引擎:camunda-bpm-spring-boot-starterRest服务接口:camunda-bpm…

深度学习中的两阶段目标检测

博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的&#xff0c…

第五元素奏鸣曲:企业的新数据之道

1997年,吕克贝松指导的经典电影《第五元素》上映,引发了全球的科幻热潮。影片中,各界都在为追逐第五元素而努力。有趣的是,二十年过去,千行百业与亿万企业开始共同追逐一种新的“第五元素”——数据。数据之所以有这个…

走迷宫项目

这个项目主要就是基于easyx图形库来用的 先是把图片加载上去,但是我搞的时候忘记使用双缓冲绘图就会导致这个图片一直闪,而且物体移动会导致图片上面留下痕迹 于是就把双缓冲加上然后把图片也放入循环当中 就不会出现之前的情况; 我的物体移…

CTO:给我一个SpringBoot实现MySQL百万级数据量导出并避免OOM的解决方案

前言 动态数据导出是一般项目都会涉及到的功能。它的基本实现逻辑就是从mysql查询数据,加载到内存,然后从内存创建excel或者csv,以流的形式响应给前端。 参考:https://grokonez.com/spring-framework/spring-boot/excel-file-dow…

软件质量保证与软件测试 第三周(决策表+黑盒测试总结)+第四周(路径测试(白盒测试的一种)+各种覆盖判定的计算)

继续上周的等价类测试用例,例题3:佣金问题等价类测试用例 题目: 弱一般:max (2, 1, 1) 2 强一般:2*1*1 2 弱健壮:2 3*2 8 强健壮:4 * 3 * 3等价类的观察总结: 第三周 决…

DC3算法生成后缀数组详解

文章目录1、何为后缀数组2、暴力生成后缀数组3、用DC3算法生成后缀数组的流程4、DC3算法代码实现C版Java版5、DC3算法的地位1、何为后缀数组 假设有一个字符串 “aabaabaa”,从每个位置开始往后到最后一个位置得到的所有的「后缀字符串」” 下标7开头:…

电商项目8:平台属性

电商项目8&#xff1a;平台属性1、后端1.1、属性分组模糊查询1.2、商品属性新增功能&#xff1a;保存关联关系1、后端 1.1、属性分组模糊查询 需要改造。当前端传0时候。模糊查询功能有点问题 AttrGroupServiceImpl Overridepublic PageUtils queryPage(Map<String, Obje…

Java 进阶(10) 线程生命周期

线程的生命周期 五种基本状态 当线程被创建并启动以后&#xff0c;它既不是⼀启动就进⼊了执⾏状态&#xff0c;也不是⼀直处于执⾏状态。 新建状态&#xff08;New&#xff09; 当线程对象对创建后&#xff0c;即进⼊了新建状态&#xff0c;如&#xff1a; Thread t new M…