高并发
文章平均质量分 95
浴血y
这个作者很懒,什么都没留下…
展开
-
高并发面试:线程池的七大参数?手写一个线程池?
线程池 1. Callable接口的使用 package com.yuxue.juc.threadPool; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * 多线程中,第三种获得多线程的方式 * */ public class CallableTest { public stat原创 2021-07-11 21:54:39 · 238 阅读 · 0 评论 -
用阻塞队列实现一个生产者消费者模型?synchronized和lock有什么区别?
多线程当中的阻塞队列 主要实现类有 ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO原则对元素进行排序 LinkedBlockingQueue是一个基于链表结构的阻塞队列,此队列按FIFO排序元素,吞吐量通常要高于ArrayBlockingQueue SynchronousQueue是一个不存储元素的阻塞队列,单个插入操作必须等到另一个线程调用移除操作,否则插 入操作一直处于阻塞状态 1. 阻塞队列概念 阻塞队列通俗来说,是一个队列,而一个阻塞队列再数据结构中所起的原创 2021-07-10 21:17:24 · 232 阅读 · 2 评论 -
多线程的这些锁知道吗?手写一个自旋锁可以吗?
多线程中的各种锁 1. 公平锁、非公平锁 1.1 概念: 公平锁就是先来后到、非公平锁就是允许加塞 Lock lock = new ReentrantLock(Boolean fair);默认非公平 公平锁是指多个线程按照申请锁的顺序来获取锁,类似排队打饭。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程优先获取锁,在高并发的情况下,有可能会造成优先级反转或者节现象。 1.2 两者区别? 公平锁: Threads acquire a fair lock in the o原创 2021-07-08 22:00:44 · 129 阅读 · 0 评论 -
集合类线程安全吗?ConcurrentModification异常遇到过吗?如何解决?
集合类不安全的问题 1. ArrayList的线程不安全问题 1.1 首先回顾ArrayList底层 ArrayList的底层数据结构是数组 底层是一个Object[] elementData的数组,初始化默认为空数组 默认容量DEFAULT_CAPACITY为10,如果容量不够调用grow()方法,将容量调整为原来的1.5倍,核心代码为int newCapacity = oldCapacity + (oldCapacity >> 1); 扩容过程是首先创建出来一个新数组,之后使用Arrays原创 2021-07-07 14:44:08 · 131 阅读 · 0 评论 -
CAS你知道吗?底层如何实现?ABA问题又是什么?关于这些你知道答案吗
CAS你知道吗?如何实现? 1. compareAndSet 在volatile当中我们提到,volatile不能保证原子语义,所以当用到变量自增时,如果用到synchronized会太”重“了,在多线程环境下我们一般用原子类如AtomicInteger,其底层是CAS,volatile见此篇 public final boolean compareAndSet(int expect, int update) { return unsafe.compareAndSwapInt(this, valueOf原创 2021-07-06 14:07:47 · 113 阅读 · 0 评论 -
对volatile的理解--从JMM以及单例模式剖析
请谈谈你对volatile的理解 1.volitale是Java虚拟机提供的一种轻量级的同步机制 三大特性1.1保证可见性 1.2不保证原子性 1.3禁止指令重排 首先保证可见性 1.1 可见性 概念:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改的值 package com.yuxue.juc.volatileTest; /** * 1验证volatile的可见性 * 1.1 如果int num = 0,number变量没有添加volatile关键字修饰 * 1.原创 2021-07-05 14:03:41 · 93 阅读 · 0 评论 -
Happens-Before原则到底规定了什么
Happens-Before 规则 如何理解 Happens-Before 呢?如果望文生义(很多网文也都爱按字面意思翻译成“先行发生”),那就南辕北辙了,Happens-Before 并不是说前面一个操作发生在后续操作的前面,它真正要表达的是:前面一个操作的结果对后续操作是可见的。 就像有心灵感应的两个人,虽然远隔千里,一个人心之所想,另一个人都看得到。Happens-Before 规则就是要保证线程之间的这种“心灵感应”。所以比较正式的说法是:Happens-Before 约束了编译器的优化行为,虽允许原创 2020-12-15 21:01:08 · 155 阅读 · 0 评论 -
并发程序背后的故事以及并发当中的内存模型
并发程序幕后的故事 核心矛盾 并发当中有一个核心矛盾一直存在,就是三者( CPU、内存、I/O 设备)的速度差异。 CPU 和内存的速度差异可以形象地描述为:CPU执行一条指令假如花费一天时间的话,CPU读写内存需要等待一年,而内存和 I/O 设备的速度差异就更大了,内存是天上一天,I/O 设备是地上十年。所以就存在一个问题,单独提高CPU是没有作用的,因为根据木桶理论,程序整体的性能取决于最慢的操作->那就是读写 I/O 设备 为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系机构、操原创 2020-12-09 21:29:26 · 80 阅读 · 0 评论