多线程与高并发(二) JUC
目录
day3
一,JUC同步工具
1,LongAdder , Atomic ,sync
2,LOCK
3,公平锁
4,ReentrantLock vs sync
5,CountDownLatch 倒数的门栓
6,CyclicBarrier 循环栅栏
7,Guava RateLimiter 限流
8,MarriagePhaser 1.7 循环栅栏
9,ReasWiriteLock 读写锁
10,Semaphore 信号灯
11,Exchange 交换器
day3
一,JUC同步工具
1,LongAdder , Atomic ,sync
LongAdder > Atomic > sync 高并发下效率高
Atomic > sync
CAS(无锁(乐观锁)优化 自旋)
线程多,操作时间短的情况下,自旋锁大于系统锁的性能
LongAdder > Atomic
CAS(无锁(乐观锁)优化 自旋)的基础上
内部分段:例如1000个线程,分成4个250个线程在一起工作,然后把这个4个一加。
线程数特别多,有明显优势。
2,LOCK
.可重入锁
可重入锁:锁一次后,可以对同样的锁再锁一次 。线程1获得锁,当线程1执行完任务再次进入的时候,在锁的头上记录有线程的标识号,对比后发现一致,继续执行,不需要额外申请。
子类实现调用父类。
sync m1 {}
sync m2 {}new Thread(rl:m1).startt();
new Thread(rl:m2).startt();
//这时1先拿到锁,2永远最后执行
//但是如果在1里面调用2,两个方法都可以执行。
sync 方法 == sync(this) 是同一把锁
.reentrantLock
使用reentrantLock 重写例子,与sync 不同的是,需要在finally里解锁
.tryLock 尝试申请时间
在指定之间内,尝试获取锁
.lockInterruptibly 可以对interrput()方法做出响应
sync
一旦wait之后,必须notify才能醒来。
lock
可以被打断的加锁,使用interrput(),可以打断加锁
---todo
3,公平锁
new ReentrantLock(true);
谁等待在前面,谁先执行。而不是一起抢。就是排不排队
先到得线程在等待队列中,
公平锁:新来的线程会查看队列中是否有线程,如果有,进入队列等待;
非公平锁:新来的线程直接抢锁是可能抢到得。
不是绝对的公平,只是先取队列中的。你还没排队,我买完东西后,又排队了。
4,ReentrantLock vs sync
锁的类型·
trylock
lockInterruptibly
公平和非公平
5,CountDownLatch 倒数的门栓
倒数的门栓:等待结束
await();//阻塞
countDown();//-1,本身是原子的
也可以使用join
6,CyclicBarrier 循环栅栏
循环栅栏:
CyclicBarrier cb = new CyclicBarrier (20,new Runnable(){run(){满20人,发车}})CyclicBarrier cb = new CyclicBarrier (20,()-> );cb.await();//加人
读取数据场景
数据库,网络,文件必须都读到才能执行,
顺序执行太慢,并发执行并使用CyclicBarrier大大节约执行时间。
使用时间比较:1+2+3 1,2,3里最长的
7,Guava RateLimiter 限流
场景:限流
8,MarriagePhaser 1.7 循环栅栏
arriveAndAwaitAdvance();//等待到达
arriveAndAwaitderegistert();//阶段停止
按不同的阶段执行:分阶段执行,需要多个参与的。(遗传算法)
循环栅栏,多个关卡,每个关卡的线程数。
场景:结婚 到达,吃,离开,洞房
不同的人有不同的阶段
所有人到才能开席,新浪新娘才能洞房
9,ReasWiriteLock 读写锁
读(共享)写(排他,互斥)锁
读多,写少,保证数据的一致性。读写都需要加锁,避免脏读。
10,Semaphore 信号灯
限流,同时只允许多少个线程执行。高速口,5个收费窗口
线程执行去获取锁,才能执行。限制的不是多少线程,而是限制多少线程同时执行。
公平,非公平
11,Exchange 交换器
交换器,两个线程交换数据使用。阻塞交换,继续执行。
多个阻塞再两两交换。
游戏中交换装备,DNF交易
乐关锁:aqs,悲观锁:sync ,自旋锁:aqs,读写锁(排它锁,共享锁):lock,分段锁:ConcurrentHashMap,Segment
多线程与高并发(二) JUC相关推荐
- 尚硅谷-互联网大厂高频重点面试题 (第2季)JUC多线程及高并发
本期内容包括 JUC多线程并发.JVM和GC等目前大厂笔试中会考.面试中会问.工作中会用的高频难点知识. 斩offer.拿高薪.跳槽神器,对标阿里P6的<尚硅谷_互联网大厂高频重点面试题(第2季 ...
- 【闲聊杂谈】直击重灾区 - 多线程与高并发
在开始学习多线程与高并发的知识之前,我想先问一个问题:你平时在写代码的时候,有没有刻意的去思考如何压榨CPU性能?其实纵观整个编程的发展历史,其实就是一部对于CPU性能压榨的血泪史. 单进程人工切换 ...
- 多线程与高并发整理总结【超全面】
我们先说一下为什么要讲多线程和高并发? 原因是,你想拿到一个更高的薪水,在面试的时候呈现出了两个方向的现象: 第一个上天 项目经验 高并发.缓存.大流量.大数据量的架构设计 第二个入地 各种基础算法, ...
- java多线程实例_多线程&高并发(全网最新:面试题+导图+笔记)面试手稳心不慌...
前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是现在 ...
- 多线程&高并发(全网最新:面试题 + 导图 + 核心学习笔记)面试手稳心不慌,轻松拿下 offer,秋招跳槽必不可少的底层能力
前言 当你开始开始去跳槽面试的时候,明明只是一份 15K 的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是 ...
- 多线程与高并发基础一(超发--多线程悲观锁,乐观锁、类数据库悲观锁乐观锁)
PS:看完文章后对自己以前所做过的并发和锁机制有了深入原理的了解. 知其然和知其所以然! 遂以记之! 关键词: 线程,同步,单例,高并发,高访问,死锁 一.大规模并发带来的挑战 在过去的工作中,我曾经 ...
- 【Java】多线程与高并发
多线程与高并发 synchronized 篇 进程 线程 协程/纤程(Quasur) 线程:一个程序里不同的执行路径 public static class T1 extends Thread{@Ov ...
- 如何掌握java多线程,高并发,大数据方面的技能?
https://www.zhihu.com/question/27575123 如何掌握java多线程,高并发,大数据方面的技能? 因为想进入互联网公司,然后发现互联网类型的公司问的主要问题都离不开这 ...
- 多线程与高并发-volatile与CAS
多线程与高并发-volatile与CAS 1.volatile 1.1volatile的作用 1.2 DCL单例模式 1.3 volatile与synchronized的区分 2.CAS ABA问题 ...
最新文章
- 谈谈HTTP1.0,HTTP1.1和HTTP2.0区别
- 转载:Ununtu下中文乱码解决方案
- Selenium2(WebDriver)总结(五)---元素操作进阶(常用类)
- Centos 开机后,登录时无法输入密码怎么解决
- 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述
- 2021.4.23最新mac11.1 big sur 关于CocoaPods安装和使用
- 计算机教学论研究生,课程与教学论(计算机)专业硕士学位研究生培养方案
- 程序员能自己独立进行程序开发,为何要去公司上班呢?真相出来了!
- 银河麒麟双击deb包无法安装
- 数学分析教程(科大)——2.4笔记+习题
- pptswot分析图怎么做_SWOT分析工具图表模板.ppt
- 锂电池电源管理系统设计与实现(单片机)
- VM虚拟机安装CentOS7添加硬盘扩展存储空间的方法
- 60行C代码实现一个shell
- Huffman Tree
- java的round函数怎么用_Java Math round()用法及代码示例
- 教教你如何配置汤姆猫 和 Java 环境变量的设置
- ESXi、PVE、unRaid的介绍及对比
- 算法 64式 7、搜索算法整理_第4部分_46到60题
- 写c语言时鼠标变成黑色柱体