![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 高并发
文章平均质量分 82
ZJE_ANDY
这个作者很懒,什么都没留下…
展开
-
java----创建线程的三种方法
目录一、继承 Thread类二、实现 Runnable接口三、实现Callable接口和Future接口四、线程同步问题一、继承 Thread类继承Thread类后必须重写Thread 的run()方法。 run()为线程类的核心方法,相当于主线程的main方法,是每个线程的入口public class MyThread extends Thread { public MyThread() { } public void run() { for(int i=0.原创 2021-03-09 17:30:32 · 212 阅读 · 0 评论 -
linux 高并发之IO多路复用select、poll和epoll的区别
一、什么是IO多路复用文件描述符(fd) 表示的是对某个文件操作的句柄。当然socket套接字也算是fd。一般来说,想对fd进行读写操作,就要操作到fd,例如 read(),但read()本身是BIO,即阻塞IO,当对fd调用read()时,如果暂时没有数据输入到fd,那么read()将会处于阻塞状态,直到有数据输入,read()才会返回。那么我们就可以想,如果现在有一个客户端连接进服务器,想要跟服务端通信,那么服务端就 对表示这个服务器的 sd(socket也能当作fd),调用read(),此时,原创 2020-12-30 15:15:15 · 1499 阅读 · 0 评论 -
JUC-----java各种线程池及其参数
目录一、线程池的好处二、Java中的ThreadPoolExecutor类的构造方法三、线程池执行流程四、Java线程池的类型五、使用线程池代码例子六、关于线程池相关疑问6.1 为什么线程池的工作队列要是阻塞队列 BlockingQueue?一、线程池的好处(1)、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管...原创 2021-02-24 23:10:06 · 359 阅读 · 0 评论 -
实现CAS的方法(JUC,mysql数据库,缓存redis)
目录1. JUC并发包自带的原子操作类2. 基于mysql的实现3. 基于缓存的实现简单解释:CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。CAS操作是原子性的,所以多线程并发使用CAS更新数据时,可以不使用锁。JDK中大量使用了CAS来更新数据而防止加锁(synchronized 重量级锁)来保持原子更新。1. JUC并发包自带的原子操作类例如:AtomicInte.原创 2021-02-18 01:05:23 · 1502 阅读 · 0 评论 -
JUC并发包------countdownlatch的使用
一、countdownlatchcountdownlatch是用于线程同步的,例如有5个线程需要同时开始运行,那怎么办呢,例如第一个就绪的线程必须等到其他4个线程就绪才能开始往下运行,若其他4个线程还没都就绪,那么第一个线程就会阻塞。同理的,其他就绪了的线程也一样,必须要等待所有线程都就绪后,才能往下运行,否则就阻塞。如下图:就如跑步比赛一样,第一个运动员在起跑线就绪后,并不能开始跑,而是要等待其他运动员都到达起跑线后,才能一起起跑。当一个运动员就绪,那么就会调用 countDown方法,表示减原创 2021-02-17 14:14:20 · 216 阅读 · 0 评论 -
Java IO 的stream 和 channel
通道(Channel):由 java.nio.channels 包定义 的。Channel 表示 IO 源与目标打开的连接。Channel 类似于传统的“流”。只不过 Channel 本身不能直接访问数据,Channel 只能与 Buffer 进行交互。(Channel本身不存储数据,因此需要配合缓冲区进行传输)https://blog.csdn.net/zcw4237256/article/details/78662762...原创 2021-02-06 18:05:22 · 2451 阅读 · 5 评论 -
高并发限流-------令牌桶算法和漏桶算法
用户在点击下单时,会在后端生成一个令牌(token),并存到redis中,然后又会从redis把对应的令牌读出来,若能成功读取,则能正常下单,若不能,证明生成令牌没成功,若没有令牌,用户是不能够正常下单的。一、令牌桶算法令牌桶算法的原理是系统以恒定的速率产生令牌,然后把令牌放到令牌桶中,令牌桶有一个容量,当令牌桶满了的时候,再向其中放令牌,那么多余的令牌会被丢弃;当想要处理一个请求的时候,需要从令牌桶中取出一个令牌,如果此时令牌桶中没有令牌,那么则拒绝该请求。二、漏桶算法把请..原创 2021-01-28 21:54:06 · 455 阅读 · 0 评论 -
CAP理论和解决方案BASE
目录一、概述二、Consistency 和 Availability 的矛盾三、解决方案BASE四、C、A、P取舍策略一、概述CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。一致..转载 2021-01-28 13:29:40 · 598 阅读 · 1 评论 -
ConcurrentHashMap的原理
目录一、ConcurrentHashMap与HashMap等的区别二、JDK1.7版本的CurrentHashMap的实现原理1.Segment(分段锁)2.内部结构3.该结构的优劣势三、JDK1.8版本的CurrentHashMap的实现原理get操作put操作由于ConcurrentHashMap 的实现在JDK1.7 和 JDK1.8 有较大不同,因此会分开两个版本讲解。一、ConcurrentHashMap与HashMap等的区别1.HashMap..原创 2021-01-19 17:57:17 · 458 阅读 · 0 评论 -
synchronized原理
一、synchronized原理如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized就是实现线程同步的关键字,可以说在并发控制中是必不可少的部分。1.1 原子性所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。但是像i++、i+=1等操作字符就不是原子性的,它们是分原创 2021-01-18 19:23:30 · 386 阅读 · 0 评论 -
Java 并发之CAS机制
目录一、什么是CAS机制二、CAS的缺点2.3 ABA问题2.4 ABA问题的解决方法三、CAS的应用场景一、什么是CAS机制CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。CAS中使用了三个操作数:内存地址V,旧的预期值A,要修改的新值B更新一个变量时,只有当 变量的内存地址V的值和旧的预期值A相同时,才会把变量更新成B。可能有点抽象,下面举个简单例子:1.在内存空间中存储着值为10的变量:2.此时线程1想要把变量增.转载 2020-11-24 21:43:19 · 204 阅读 · 0 评论 -
Java 并发之volatile
目录一、并发的三大问题1.原子性问题2.可见性问题3.有序性问题二、volatile能保证什么(可见性和有序性)1. 保证可见性的重要性volatile如何保证可见性2. 保证有序性的重要性volatile如何保证有序性3.不能保证原子性的问题三、volatile保证原子性的方法四、总结附:一、并发的三大问题原子性问题、可见性问题、有序性问题。1.原子性问题 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打.原创 2020-11-24 15:45:52 · 187 阅读 · 0 评论 -
Java并发之BIO NIO AIO IO多路复用的区别
目录一、基础概念一、阻塞和非阻塞二、同步和的异步三、阻塞非阻塞和同步异步的结合同步阻塞:同步非阻塞:异步阻塞:异步非阻塞:二、BIO模型 (Blocking IO)同步阻塞IOBIO特点三、NIO模型(Non-blockingIO)NIO特点:四、IO多路复用模型IO多路复用和NIO的区别多路复用IO的特点五、AIO( Asynchronous I/O)异步非阻塞I/O模型一、基础概念一、阻塞和非阻塞当线程访问资源时,...原创 2020-11-20 10:12:09 · 4519 阅读 · 2 评论 -
Java 并发之虚假唤醒
目录一、什么是虚假唤醒?二、开发中虚假唤醒会造成问题的场景:三、为什么 if 会产生虚假唤醒四、怎么产生虚假唤醒一、什么是虚假唤醒?当一个条件满足时,很多线程都被唤醒了,但是只有其中部分是有用的唤醒,其它的唤醒都是无用功1.比如说买货,如果商品本来没有货物,突然进了一件商品,这是所有的线程都被唤醒了 ,但是只能一个人买,所以其他人都是假唤醒,获取不到对象的锁二、开发中虚假唤醒会造成问题的场景:例如在多线程的场景中,判断一个线程是否需要阻塞(调用wait())时,如.原创 2020-10-24 10:50:52 · 344 阅读 · 1 评论