
JUC
文章平均质量分 88
多线程、高并发相关技术
乌托邦钢铁侠
Practice makes perfect, fighting with my time .
1. Java
2. English foolish
3. Love riding
展开
-
海量数据问题: 如何用JAVA几分钟处理完30亿个数据?
题目现有一个10G文件的数据,里面包含了18-70之间的整数,假设年龄范围分布均匀,分别表示系统中所有用户的年龄数,请找出重复次数最多的那个数,现有一台内存为4G、2核CPU的电脑,请写一个算法实现。 23,31,42,19,60,30,36,........模拟数据Java中一个整数占4个字节,模拟10G为30亿左右个数据, 采用追加模式写入10G数据到硬盘里。 每10万个记录写一行,大概0.4M一行,10G大概25000...原创 2022-05-08 08:06:53 · 6945 阅读 · 8 评论 -
AtomicStampedReference和AtomicMarkableReference详解
AtomicStampedReference和AtomicMarkableReference是解决CAS存在ABA问题的两种方案,他们俩的实现原理大致相同,弄明白AtomicStampedReference的实现原理,AtomicMarkableReference就迎刃而解了。AtomicStampedReferenceAtomicStampedReference是JUC的atomic包里提供的一个类,官方解释该类的作用是:An AtomicStampedReference m...原创 2022-01-02 23:05:30 · 1615 阅读 · 0 评论 -
CAS是什么? ABA问题怎么解决?
CAS是CompareAndSet的缩写,它是一组操作的整合,CAS将当前值与期望的值做比较,如果当前值与期望值相等,那么就将新值给更新进去作为当前值,否则不会更新新值给当前值。CAS是Java在多线程并发场景下提供的一种非阻塞的机制,具有原子性,是一种避免加锁的也能实现线程安全的,它的实现是在JVM层面上的。原创 2021-12-01 23:30:00 · 923 阅读 · 0 评论 -
基于ReentrantLock实现简易生产者、消费者模型
实际开发中,我们可能会需要一个队列场景,往队列投入资源的为生产者,往队列中拿元素的为消费者,那么ReentrantLock能帮助我们实现这种生产者、消费者模型。 实现原理: 我们可以借助ReentrantLock定义两个信号量: notFull和notEmpty, notFull.await()阻塞生产者投放资源,同时提醒消费者可以拿资源,notFull.signal() 用来提醒生产者可以继续投放资源 ; notEmpty.await用来阻塞消费者拿资源并提醒生产者往队列...原创 2021-11-30 08:11:54 · 2371 阅读 · 1 评论 -
深入理解AbstractQueuedSynchronizer(二)ReentrantLock底层实现原理
深入理解AbstractQueuedSynchronizer(一)_ Dream_it_possible!的博客-CSDN博客在上一篇文章中,介绍了AQS中的条件等待队列和同比队列,此文接着上一篇文章继续深究AQS中设计的精髓, 接着看获取共享式锁的方法doAcquireShared(int arg), 代码如下: /** * Acquires in shared uninterruptible mode. * @param arg...原创 2021-11-27 23:23:32 · 661 阅读 · 0 评论 -
演示ReetrantLock锁的Maximum lock count exceeded问题
我们在工作中,有些场景下可能会用到ReetrantLock, 他是一个独占式的锁,如果使用不当,我们可能会遇到报Maximum lock count exceeded的移除,此异常式一个典型的溢出问题。 我们可以根据异常找到报错的地方,然后打个断点,在此写了一个例子,用来演示此问题, 原理如下: 开启三个线程,在执行的时候加锁,然后不释放,直到报错。package com.example.jucdemo.lock;import java.util...原创 2021-11-27 22:37:17 · 1158 阅读 · 0 评论 -
深入理解AbstractQueuedSynchronizer(一)
一、什么是AQS?AbstractQueuedSynchronizer简称AQS,它 是一个抽象的队列同步器,AQS通过维护一个共享的资源状态state, 其中state 被关键字volatile修饰,和一个先进先出的线程等待队列来实现多线程环境下的共享资源的同步访问。AQS在并发编程中是一个非常重要的抽象类,AbstractQueuedSynchronizer类在java.uti.concurrent.locks包下的,很多并发关键字,例如,CountDownLatch、CyclicB...原创 2021-11-22 23:33:17 · 743 阅读 · 0 评论 -
TransmittableThreadLocal 解决了哪些问题?
随着现在应用的分布式以及各种中间件的使用,我们的系统也越来越多的功能和组件涉及到上下文,上下文问题实际上是一个易错的架构问题,因此我们需要统一对业务透明的解决方案。一、transmittable-thread-local使用场景在使用线程池等会池化复用线程的执行组件情况下,transmittable-thread-local提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题 1. 分布式跟踪系统或全链路压测。 ...原创 2021-07-06 17:20:50 · 2256 阅读 · 4 评论 -
ThreadLocal介绍
一、ThreadLocal ThreadLocal 能够保证在多线程情况下,每个线程独有一份对象,xiangdan下面看一下ThreadLocal是怎么实现分隔线程和对象的。原创 2021-06-17 15:45:13 · 769 阅读 · 2 评论 -
深入解析CountDownLatch核心源码
一、CountDownLatch 介绍 CountDownLatch是JUC包下的并发关键字,可以通过CountDownLatch可以等待多个子线程原创 2021-06-10 11:35:55 · 852 阅读 · 0 评论 -
Netty 经典面试题汇集
面试官: 请您说一下netty的线程组模型?我:线程组就是EventLoopGroup, 一般客户端和服务端用2个线程组就够,一个Boss线程组,一个worker线程组,boss线程组的数量为1, workd线程组的数量为默认的数量。面试官:设置boss线程组的数量为什么为1,有什么讲究嘛?我:设置boss线程组数量为1,就是为了监听socketChannel里的连接,然后将socketChannel包装成NioSocketChannel, 另外Boss线程...原创 2021-05-30 12:59:11 · 1066 阅读 · 0 评论 -
用Java模拟多线程下的客户端与服务端数据交互
场景 用99条子线程去接收客户端发送过来的请求,用1个主线程去接收99条子线程处理完后的结果,其中99条子线程相当于服务端的线程,99个请求相当于客户端发送过来的数据包。案例分析 此实例主要含有以下4个类。 FutureMain: 主线程,创建子线程,获取子线程的处理结果。 RequestFuture: 请求类,相当于是HttpRequest, 最核心的是get()方法和received()方法,get()方法用...原创 2021-05-20 22:49:45 · 923 阅读 · 3 评论 -
多线程基础篇(一)
一、什么是同步?什么是异步? 一个共享的资源只能在某一时刻被一个线程所使用,直到该共享资源被使用完毕后,才能允许其他线程使用。这种方式就是同步。 不用等待其他线程在执行的任务A,当前线程就可以执行除了此任务A外的任务B,然后等任务A被释放完毕后,当前线程可以继续执行,一般通过回调的方式来通知线程执行完毕。这种方式为异步。二、共享资源 ...原创 2020-07-22 10:36:58 · 284 阅读 · 0 评论 -
postman、jmeter测试工具用法详解
一、Postman介绍 postman是一个接口调试工具,可以模拟适应各种http请求的场景。二、常用功能 1.发送json数据包 在raw里添加json包,然后选中JSON: 2. 发送xml报文 在raw里面选择XML形式的内容,就可以把报文贴进去: 3.发送文件 使用postman发送两个word等文件时,需要在Headers里面设置Content-Type=multipart/fo...原创 2020-06-24 09:08:46 · 1108 阅读 · 0 评论 -
Java线程内存模型JMM和内存屏障学习
一、Volatile关键字 在学习JMM之前需要了解一下Volatile关键字,Volatile关键字能够在多线程条件下使线程具有可见性。通过Volatile关键字能够让当前线程看到其他线程对共享变量的操作,它能够保证共享变量被修改时能够被检测到,然后当前线程就能够重新获取到主内存中被修改的共享变量。二、JMM图三、演示Volatile关键字的效果...原创 2020-03-17 08:39:36 · 306 阅读 · 0 评论